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

Django基于AbstractUser自定义用户模型邮箱登录失败排查

问题分析与解决方案

从你的调试输出能看到关键问题:打印的user.password是明文Lovell32bd,但Django的authenticate方法只会验证哈希后的密码,直接存储明文密码会导致验证失败,返回None。

核心原因

Django默认要求用户密码以哈希形式存储,你的用户密码是明文存入数据库的,authenticate无法匹配明文与哈希值,因此返回None。

解决步骤

1. 修复用户创建逻辑

创建用户时必须使用Django提供的create_user()方法,而非直接用User.objects.create(),前者会自动对密码进行哈希处理:

# 正确创建用户示例
user = User.objects.create_user(email='www.cool444@gmail.com', password='Lovell32bd')
user.username = 'tim'
user.save()

如果是通过注册表单创建用户,需确保表单的save()方法内部调用create_user,而非直接实例化保存。

2. 修复现有用户的密码

对于已存入数据库的明文密码用户,通过Django Shell更新密码:

# 进入Django Shell
python manage.py shell

执行以下代码:

from your_app.models import User
user = User.objects.get(email='www.cool444@gmail.com')
user.set_password('Lovell32bd')  # 传入原密码,set_password会自动哈希
user.save()

3. 确认AUTH_USER_MODEL配置

确保在项目settings.py中正确指定自定义用户模型:

AUTH_USER_MODEL = 'your_app.User'  # 替换为你的app名称和模型名

该配置需在项目初始化时设置,否则可能引发数据库结构问题。

额外优化

登录表单中密码输入框建议改为type="password",提升安全性:

<input id="username" name="email" type="password" placeholder="e.g user@user.com" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:12:48