DRF-simple-JWT:新用户注册成功后无法正常登录问题排查
问题根因
1. 新用户默认未激活
你自定义的CustomUser模型中,is_active字段默认值设置为False,而djangorestframework-simplejwt的认证逻辑默认仅允许状态为活跃的账号获取token,这是触发No active account found with the given credentials报错的直接原因。
2. 密码被二次哈希导致凭证校验失败
你的序列化器逻辑存在冲突:
- 首先在
validate_password方法中调用了make_password,将用户传入的明文密码直接转为哈希值 - 随后在
create方法中又调用了instance.set_password(password),该方法会将传入的参数再次做哈希处理
最终数据库中存储的是经过两次哈希的密码,和用户输入的明文密码完全不匹配,即便账号激活也无法通过凭证校验。
修复方案
- 删除冗余的密码哈希逻辑:直接删掉
RegisterUserSerializers中的validate_password方法即可,create方法中的set_password已经可以正确处理明文密码的加密。 - 修改用户默认活跃状态:
- 如果你不需要新用户审核流程,注册后即可直接登录,将
CustomUser模型中is_active字段的默认值改为default=True,执行makemigrations和migrate命令更新数据库结构即可。 - 如果你需要保留用户激活流程(如邮件激活),则额外开发激活接口,用户完成激活操作后将对应账号的
is_active字段更新为True即可正常获取token。
- 如果你不需要新用户审核流程,注册后即可直接登录,将
内容的提问来源于stack exchange,提问作者RevTpark
相关产品推荐
相关产品推荐

