Django check_password无法成功验证数据库存储密码问题求助
问题根因
你遇到的验证失败问题核心是自定义用户模型的密码字段长度设置不足:
Django 默认使用的 pbkdf2_sha256 算法生成的完整哈希密码长度普遍在80位以上,你给出的示例哈希值 pbkdf2_sha256$260000$Y0LeK0HJ90YPrj5lOijV20$oFRLMk 本身长度就已经达到62位,而你定义的 password = CharField(max_length=50, null=False) 会导致哈希值写入数据库时被自动截断,丢失后半段有效校验信息。
你单独运行 make_password + check_password 能验证成功,是因为这个过程没有经过数据库存储的截断步骤,哈希值是完整有效的,完全符合该问题的表现特征。
修复方案
- 调整自定义用户模型的密码字段长度,建议和Django内置用户模型保持一致设置为128位:
class tblusers(models.Model): user_id = BigAutoField(primary_key=True) password = CharField(max_length=128, null=False) created_at = DateTimeField(auto_now_add=True, blank=True)
- 生成并执行数据库迁移,同步更新数据库表的字段长度限制
- 重新生成所有用户的密码哈希存入数据库:此前被截断的密码哈希已经缺失校验必要信息,无法再通过验证,需要引导用户重置密码或者后台重新生成完整哈希后存储。
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

