Django自定义Doctor用户模型登录提示无效密码问题排查
问题原因分析
1. 错误重写password字段导致密码未正确哈希存储
你的Doctor模型手动定义了password = models.TextField(max_length=150),但AbstractUser已经自带了经过加密处理的password字段。Django默认会对用户密码进行哈希(如PBKDF2算法)后再存入数据库,你重写的password字段会绕过这个加密机制,导致数据库中存储的是明文密码(或不符合Django规范的格式)。
当authenticate方法验证时,会将用户输入的密码与数据库中存储的哈希密码进行比对,由于数据库内的密码不是正确的哈希格式,必然验证失败,返回"Invalid password"错误。
2. is_doctor属性未定义
视图代码中判断了user.is_doctor,但Doctor模型里并没有定义这个字段或属性。即便认证成功,这个判断也会让逻辑进入else分支,同样返回密码错误的提示。
3. username字段未设置唯一性(次要潜在问题)
AbstractUser默认要求username字段唯一,但你重写的username = models.CharField(max_length=50)未添加unique=True约束,后续可能引发数据完整性问题。
内容的提问来源于stack exchange,提问作者Ansal R
相关产品推荐
相关产品推荐

