【问题标题】:Django authenticate username not working with USERNAME_FIELDDjango 验证用户名不适用于 USERNAME_FIELD
【发布时间】:2021-03-21 20:27:06
【问题描述】:

我正在为我的应用程序登录,使用自定义用户模型和表单,使用电子邮件作为模型中的用户名字段,并在登录过程中询问电子邮件和密码。问题是在我看来,在身份验证方法中没有找到匹配项,所以我无法登录我的用户。代码如下:

用户模型

class usuarios(AbstractBaseUser):
    nombre = models.CharField(max_length=32, null=False)
    apellido = models.CharField(max_length=32, null=False)
    correo = models.EmailField(null=False, unique=True)
    password = models.CharField(max_length=200, null=False)
    fecha_nacimiento = models.DateField(null=False)
    USERNAME_FIELD = 'correo'
    objects = userManager()
    def __str__(self):
        return self.correo+' '+self.nombre+' '+self.apellido

登录表单

class loginForm(forms.Form):
    correo = forms.EmailField()
    password = forms.CharField(
        widget=forms.PasswordInput()
    )
    class Meta:
        model = usuarios
        fields = ("correo","password")

登录视图

class usuario_login(FormView):
    template_name = "user/usuario_login.html"
    form_class = loginForm
    success_url = reverse_lazy('user:crear')
    def form_valid(self, form):
        usuario = authenticate(
            username=form.cleaned_data['correo'],
            password=form.cleaned_data['password']
        )
        if usuario is not None:
            login(self.request, usuario)
        else:
            return HttpResponseRedirect(
                reverse_lazy('user:login')
            )
        return super(usuario_login, self).form_valid(form)

如您所见,在登录视图中,我尝试在登录之前验证用户名(即电子邮件)和密码。感谢您的帮助,然后感谢您。

【问题讨论】:

    标签: django


    【解决方案1】:

    没关系,问题是当我更改 AbstractBaseUser 时,我也必须更改身份验证用户模型,所以我只是在设置中添加了这个 documentation 状态:

    AUTH_USER_MODEL = 'user.usuarios'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 2014-08-16
      • 1970-01-01
      • 2011-04-18
      • 2021-08-23
      • 2017-02-25
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多