在这里提问。我在使用DRF + JWT测试登录功能时遇到问题。这一切都在测试环境之外正常工作,我可以使用完全相同的方法以管理员身份登录,然后我将我的令牌恢复。
from django.test import TestCase
from django.contrib.auth.models import User
from rest_framework.test import RequestsClient
TEST_USER = {
'username': 'test1',
'email': 'test@test.com',
'password': 'qwe123qwe',
}
BASE_URL = 'http://testserver/'
API_LOGIN = 'http://testserver/' + 'api-token-auth/'
class TestAuthentication(TestCase):
def setUp(self):
User.objects.create(**TEST_USER)
self.requests = RequestsClient()
def test_user_can_login(self):
user = User.objects.first()
self.assertEqual(User.objects.count(), 1)
response = self.requests.post(API_LOGIN, TEST_USER)
print(response.content)
输出是:
b' {" non_field_errors":["无法使用已提供的信息登录 凭证"]}' .. -------------------------------------------------- --------------------在0.018s中进行2次测试
我真的想在我的测试中包含登录/注销,因为它是我项目的基础。如果我能提供更多可以帮助你帮助我的信息请发表评论,我会看到这个帖子直到它解决了,我没有更好的事情要做:)
编辑:
似乎问题与测试无关......
>>> from django.contrib.auth.models import User
>>> User.objects.create(username="test1", password="qwe123qwe")
>>> r = post("http://127.0.0.1:8000/api-token-auth/", data={'username': 'test1', 'password': 'qwe123qwe'})
>>> r
<Response [400]>
>>> r.content
b'{"non_field_errors":["Unable to log in with provided credentials."]}'
对于超级用户(manage.py createsuperuser),它可以正常工作
>>> r = post("http://127.0.0.1:8000/api-token-auth/", data={'username': 'root', 'password': 'qwe123qwe'})
>>> r.content
b'{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InJvb3QiLCJleHAiOjE1MTc2NzQ4OTMsImVtYWlsIjoid0B3LnBsIn0.hox4-aggdWB5xG0HNe3vUeVAiVZTPbqe373fdVaERWI"}'
答案 0 :(得分:0)
我正在使用django rest token并将其用于测试
from rest_framework.test import APIClient
# get token
temp = APIClient()
data = {"username": "testuser", "password": "abc"}
resp = temp.post("/token-auth/", data=data, follow=True)
token = resp.data["token"]
# authenticate using the token header on other API
temp.credentials(HTTP_AUTHORIZATION='Token ' + token)
resp = temp.get("/getMyItems")
print("resp: " + str(resp))
答案 1 :(得分:0)
好吧,如果有人关心这个问题我正在使用
User.objects.create().
创建用户的正确方法是
User.objects.create_user()