邀请用户使用django-allauth

6

我想介绍一个流程,我们已经在使用allauth并希望尝试将其与allauth配合使用(可能会添加另一个软件包):

  1. 通过指定电子邮件地址邀请新用户(仅需电子邮件地址,无需密码)
  2. 用户收到电子邮件后,点击邀请链接,进入一个表单页面,其中他的电子邮件地址已经填好,他需要填写更多的字段,如密码、名字和姓氏以及我将添加到用户模型中的一些自定义字段。
  3. 用户点击确认后,将登录系统,并重定向到根URL。

您可以创建一个自定义的注册表单和视图,该视图获取电子邮件地址作为GET参数,并预填充用户实例。 - Selcuk
https://github.com/arctelix/django-invitation - cdvv7788
2个回答

5

django-invitations是一个通用的邀请解决方案,曾经是django-allauth的插件,但现在已经独立存在。

  • 有一个管理界面,可以创建邀请
  • 发送给用户的电子邮件基于易于覆盖的模板
  • account_signup的URL是用户需要重定向到的位置,您需要自己实现

第三步,您需要自己实现。


1

这是一篇旧文章,但我认为它将有助于未来的读者。

我一直在研究这个问题,但找不到任何稳定或实际做我想要的事情的库。然而,我研究了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 

现在,您可以创建其他视图,让用户设置其密码,并使用Django用户方法has_usable_password()检查他们是否已经拥有可用的密码。"最初的回答"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接