DRF Knox登录测试失败,排查无果寻求解决方案
问题原因及解决办法
问题出在用户创建时密码没有被正确哈希。你用get_user_model().objects.create()直接设置password字段时,存入的是明文密码,但Django的认证系统(包括knox的登录接口)会用哈希后的密码进行验证,所以导致凭据不匹配,返回400错误。
Postman能成功是因为实际环境中创建用户时,你应该用了正确的密码哈希方式(比如注册接口、后台创建流程自动处理了密码哈希)。
解决办法有两种:
- 使用
create_user方法创建用户(推荐),该方法会自动处理密码哈希:
@classmethod def setUpTestData(cls): cls.user = get_user_model().objects.create_user( email="test@email.com", password="testpass123" )
- 若坚持用
create方法,需手动调用set_password并保存:
@classmethod def setUpTestData(cls): cls.user = get_user_model().objects.create( email="test@email.com" ) cls.user.set_password("testpass123") cls.user.save()
修改后重新运行测试,即可正常通过登录验证,返回200状态码。
内容的提问来源于stack exchange,提问作者fl4t1
相关产品推荐
相关产品推荐

