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

使用Django Shell创建用户后无法登录,authenticate返回NoneType

解决Django中authenticate返回None的问题

嗨,这个问题我之前也踩过坑!根源其实很明确:你用User.objects.create()创建用户的时候,密码是直接以明文存在数据库里的,但Django的authenticate()方法只认经过哈希处理后的密码,所以哪怕你输入的密码字符串完全正确,验证也会失败,返回None。

给你两个实用的解决方案:

方案一:用正确的方法创建用户(推荐)

Django专门提供了create_user()方法来创建用户,它会自动帮你完成密码哈希的工作,用这个方法创建的用户就能正常通过验证:

>>> from django.contrib.auth.models import User
>>> from django.contrib.auth import authenticate
>>> # 用create_user创建用户,自动处理密码哈希
>>> User.objects.create_user(username='user', password='password', email='someemail')
>>> # 现在再尝试验证
>>> authenticated_user = authenticate(username='user', password='password')
>>> print(authenticated_user)  # 会输出<User: user>,验证成功

方案二:修复已创建的用户

如果你已经用create()创建了用户,不想重新创建的话,可以手动给用户设置哈希后的密码:

>>> # 获取已存在的用户对象
>>> user = User.objects.get(username='user')
>>> # 用set_password方法生成哈希密码并设置
>>> user.set_password('password')
>>> # 一定要保存修改!
>>> user.save()
>>> # 现在验证就没问题了
>>> authenticate(username='user', password='password')  # 返回用户对象

补充一句:Django对用户密码的存储有严格要求,必须用PBKDF2等安全算法哈希后存储,create()方法只是普通的模型创建方法,不会处理密码的哈希逻辑,所以创建用户一定要用create_user()(创建超级用户用createsuperuser命令)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:27