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

Django DRF用Simple JWT测试登录时Pytest断言返回401而非200

问题根因
  • 核心原因是你通过mixer.blend创建测试用户时,直接将password字段赋值为明文1,没有经过Django默认的哈希加密处理。Django用户认证体系的数据库仅存储加密后的密码哈希值,Simple JWT的TokenObtainPairView验证登录时,会将用户提交的明文密码做哈希运算后与数据库存储值比对,二者不匹配就会返回401未授权错误。
  • 次要排查点:如果你自定义了User模型并将email作为登录唯一标识,需要确保User模型类中已经配置USERNAME_FIELD = 'email',与Simple JWT的默认校验逻辑适配。
修复方案

修改测试fixture的用户创建逻辑,调用Django内置的set_password方法处理密码,该方法会自动完成哈希加密后再入库:

@pytest.fixture
def setup_user(self):
    # 初始化用户时不直接赋值password字段
    user = mixer.blend(User, email='a@a.com')
    user.set_password('1')
    user.save()
    return user

修改后重新运行测试即可通过第二条状态码断言。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:36:01