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 状态码?

Django Rest Framework "detail":"未提供身份验证凭据。"

未提供身份验证凭据。 Django Rest Framework/JWT 和 React 原生 iOS