【问题标题】:Inviting users django-allauth邀请用户 django-allauth
【发布时间】:2015-02-11 10:17:13
【问题描述】:

我想介绍一个流程,我们已经在使用 allauth 并且想尝试让它与 allauth 一起工作(可能会添加另一个包):

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

【问题讨论】:

标签: django django-allauth


【解决方案1】:

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

  • 有一个允许创建邀请的管理界面
  • 发送给用户的电子邮件基于易于覆盖的模板
  • account_signup 的网址是您需要实现的用户被定向到的位置

第 3 步,您需要自己实现

【讨论】:

    【解决方案2】:

    这是一篇旧帖子,但我认为它会在未来对其他人有所帮助。

    我一直在努力解决这个问题,但找不到任何稳定的库或实际上可以满足我的需求。但是,我从rest_auth 研究了RegisterSerializer 的代码,然后创建了自己的来覆盖RegisterSerializer 中的特定方法。

    这是我的最终代码:

    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() 来检查他们是否已经有可用的密码@

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 2020-06-14
      • 2012-01-06
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多