Django Rest Framework 的凭据不正确?
Posted
技术标签:
【中文标题】Django Rest Framework 的凭据不正确?【英文标题】:Incorrect credentials with Django Rest Framework? 【发布时间】:2016-11-21 13:43:25 【问题描述】:我正在尝试使用 Django Rest Framework 设置令牌身份验证。我目前正在编写一些测试,看看我是否可以获得为用户返回的令牌。下面是单元测试的代码(在测试用例中)。
def test_create_valid_request(self):
u = User.objects.create(username='test1', password='thisis8chars')
Token.objects.create(user=u)
# these assertions all pass
self.assertEqual(User.objects.get(username='test1'), u)
self.assertEqual(u.username, 'test1')
self.assertEqual(u.password, 'thisis8chars')
data = 'username': 'test1', 'password': 'thisis8chars'
url = "/api-token-auth/"
response = self.client.post(url, data, format="json")
print response.status_code
print response.content
打印出来:
400
"non_field_errors":["Unable to log in with provided credentials."]
我知道我的凭据一定有问题,但我看不到。我创建了一个用户,测试了它的属性,并发出了一个 post 请求来检索令牌。我已经在 Django 开发服务器上使用httpie
手动测试了它,它可以工作并返回令牌。任何想法可能是什么问题?这是我的测试设置有问题吗?如果有,是什么?
如有必要,我可以发布/描述更多代码。
谢谢
【问题讨论】:
【参考方案1】:正如您已经说过的,您需要使用User.objects.create_user
。
此外,如果您已经实例化了一个 User 对象并想要更改其密码,则需要调用 user.set_password(raw_password)
方法。
【讨论】:
【参考方案2】:好的,所以错误很简单:我想要User.objects.create_user
而不是User.objects.create
。
我在上面的代码中尝试使用的密码有问题,因为它没有经过哈希处理或加盐处理,而且因为 Django 不存储或发送纯文本密码,所以我发送纯文本密码会导致错误的凭据错误。
【讨论】:
以上是关于Django Rest Framework 的凭据不正确?的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework:未提供身份验证凭据
Django Rest Framework JWT 未提供身份验证凭据
django-oauth-工具包; Django Rest Framework - 未提供身份验证凭据
Django Rest Framework - 为啥在尝试使用不正确的凭据登录用户时返回 200 状态码?