我想介绍一个流程,我们已经在使用allauth并希望尝试将其与allauth配合使用(可能会添加另一个软件包):
- 通过指定电子邮件地址邀请新用户(仅需电子邮件地址,无需密码)
- 用户收到电子邮件后,点击邀请链接,进入一个表单页面,其中他的电子邮件地址已经填好,他需要填写更多的字段,如密码、名字和姓氏以及我将添加到用户模型中的一些自定义字段。
- 用户点击确认后,将登录系统,并重定向到根URL。
我想介绍一个流程,我们已经在使用allauth并希望尝试将其与allauth配合使用(可能会添加另一个软件包):
django-invitations是一个通用的邀请解决方案,曾经是django-allauth的插件,但现在已经独立存在。
account_signup
的URL是用户需要重定向到的位置,您需要自己实现第三步,您需要自己实现。
这是一篇旧文章,但我认为它将有助于未来的读者。
我一直在研究这个问题,但找不到任何稳定或实际做我想要的事情的库。然而,我研究了rest_auth
中的RegisterSerializer代码,然后创建了自己的代码以覆盖RegisterSerializer中的特定方法。
以下是我的最终代码:
Original Answer翻译成"最初的回答"
class UserInviteSerializer(RegisterSerializer):
# first_name and last_name were required for my case but they are not necessary.
first_name = serializers.CharField(required=True)
last_name = serializers.CharField(required=True)
email = serializers.EmailField(required=True)
# override password1 and password2 to not be required.
password1 = serializers.CharField(write_only=True, required=False)
password2 = serializers.CharField(write_only=True, required=False)
# override validate so that you don't get the error that
# password1 and password2 are required.
def validate(self, data):
return data
def get_cleaned_data(self):
super(UserInviteSerializer, self).get_cleaned_data()
return {
'first_name': self.validated_data.get('first_name', ''),
'last_name': self.validated_data.get('last_name', ''),
'email': self.validated_data.get('email', ''),
}
# create your own create method.
def create(self, validated_data):
user = models.User(**validated_data)
# this is really important because password is required
# by the User model. So you need to use the django method
# `set_unusable_password`
user.set_unusable_password()
# username was not being generated by AllAuth so I had to set it.
user.username = user.email
user.save()
return user
has_usable_password()
检查他们是否已经拥有可用的密码。"最初的回答"。