使用常规帐户注册创建重复(和空)用户

时间:2014-03-22 00:15:46

标签: django django-allauth

我在项目中设置了django-allauth,社交帐户工作得很好。但是,当我使用常规帐户创建用户时,它会向用户保存两次:一个用户名另一个没有用户名(这是空用户名)。因此,下次我尝试创建用户时会引发异常,因为用户名必须是唯一的并且是重复的,即空用户名。

为每个信号设置接收器并在处理每个信号时打印日志。但是,我只能解决populate_username信号和email_confirmation_sent信号

之间的问题

1 个答案:

答案 0 :(得分:1)

在深入了解源代码后,在任何地方撒上日志,我发现问题是由我使用的自定义注册模型表引起的(我本可以想出来但这并不容易)。

django-allauth手动保存用户,因此在我的情况下,表单模型默认保存方法再次执行并导致错误。

正如docs中指出的那样:

  

此类(ACCOUNT_SIGNUP_FORM_CLASS)应实现def注册(自我,请求,用户)方法,其中用户代表新注册的用户。

然而,欣赏是相当模糊的(至少在我的情况下),很容易认为ACCOUNT_SIGNUP_FORM_CLASS可以是一个表格(不论那种)。

所以,我找到了两个解决方案:

  1. 使用常规表单替换模型表单。但是,文档中没有明确说明。
  2. 覆盖ModelForm的save方法并跳过对父级保存方法的调用
  3. 我实施了第二个,表格最终如下:

    class SignupForm(UserCreationForm):
    
        class Meta:
            model = get_user_model()
            fields = ('first_name', 'last_name', 'email')
    
        def save(self, commit=True):
            return None