You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django LoginView无法验证用户问题排查求助

问题排查与解决方案

核心原因

  1. 密码未加密存储:注册时直接用objects.create()创建用户,会把表单中的明文密码存入数据库,而Django的LoginView验证时会用哈希算法比对密码,明文与哈希值不匹配,导致登录失败。
  2. 重复定义password字段:AbstractUser已内置password字段,你在CustomUser中重新定义会覆盖父类的字段逻辑,破坏Django的密码加密机制。

修复步骤

1. 修正CustomUser模型

删除自定义的password字段,依赖AbstractUser自带的字段及加密逻辑:

class CustomUser(AbstractUser):
    objects = UserManager()

    username = models.CharField(
        unique=True,
        max_length=150,
        error_messages={
            'unique': "Пользователь с таким ником уже есть"},)
    email = models.EmailField(
        'почта',
        unique=True,
        blank=False)
    # 移除重复定义的password字段
    first_name = models.CharField(
        'имя',
        max_length=30,
        blank=True)
    second_name = models.CharField(
        'фамилия',
        max_length=30,
        blank=True)
    birthday = models.DateField(
        'день рождения',
        blank=True,
        null=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    class Meta:
        verbose_name = 'user'
        verbose_name_plural = 'users'

2. 修正注册视图

使用Django提供的create_user()方法创建用户,该方法会自动对密码进行哈希处理:

def registrations(request):
    form = RegistrationForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        user_data = form.cleaned_data
        # 单独提取密码,用create_user处理加密
        password = user_data.pop('password')
        user = CustomUser.objects.create_user(password=password, **user_data)
        user.save()
        messages.success(request, 'Вы успешно зарегестрировались')
    context = {
        'form': form,
    }
    return render(request, 'user/reg.html', context)

3. 配置自定义用户模型

在settings.py中添加配置,让Django认证系统识别你的CustomUser:

AUTH_USER_MODEL = '你的应用名.CustomUser'

(将你的应用名替换为实际存放CustomUser的应用名称,比如users.CustomUser)

4. 清理旧测试数据(可选)

此前注册的用户密码为明文存储,修复后这些旧用户仍无法登录,可清空用户表或重新创建测试用户。

验证修复

重启服务后注册新用户,使用该用户的邮箱和密码登录,LoginView即可正常验证通过。

内容的提问来源于stack exchange,提问作者Dima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:10:42