我尝试使用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请求来检索令牌。我在httpie
的Django开发服务器上手动测试了它,它可以工作并返回令牌。任何想法可能是什么问题?这是我的测试设置的问题吗?如果是这样,是什么?
如有必要,我可以发布/描述更多代码。
由于
答案 0 :(得分:1)
好的,错误非常简单:我想要User.objects.create_user
而不是User.objects.create
。
我尝试使用上面代码的密码是有问题的,因为它没有散列或盐渍,而且因为Django不存储或发送纯文本密码,所以我发送纯文本密码导致凭据错误。
答案 1 :(得分:0)
正如您已经说过的那样,您需要使用User.objects.create_user
。
要添加此功能,如果您已经实例化了User对象并想要更改其密码,则需要调用user.set_password(raw_password)
方法。