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
相关产品推荐
相关产品推荐

