如何使用 jwt 测试成功的令牌声明
How to test successful token claim with jwt
我正在使用 django rest simple jwt,我想测试一个简单的登录并检查令牌和其他自定义数据的响应数据。
所以我尝试使用 APITestCase 创建一个用户,然后尝试使用相同的凭据登录。
结果是 401 而不是 200,在响应数据中带有标记。
这是我简化的测试用例:
from rest_framework.test import APITestCase
from django.contrib.auth import get_user_model
# Create your tests here.
User = get_user_model()
class UserAuthTestCase(APITestCase):
username = "someuser"
password = "1234pass"
def setUp(self):
self.user = User.objects.create(
username=self.username,
password=self.password
)
def test_successful_login_gives_200(self):
response = self.client.post(
'/auth/token/',
{
'username': self.username,
'password': self.password
},
format='json'
)
self.assertEqual(response.status_code, 200)
其余框架配置设置为仅使用 simplejwt 身份验证。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
当使用 User.objects.create
创建 User
时,您设置的密码没有 散列 所以当您稍后尝试验证用户时,您最终会比较哈希密码值与数据库中的原始未哈希密码。使用 User.objects.create_user
通过在内部调用 set_password
来处理散列。
我正在使用 django rest simple jwt,我想测试一个简单的登录并检查令牌和其他自定义数据的响应数据。
所以我尝试使用 APITestCase 创建一个用户,然后尝试使用相同的凭据登录。
结果是 401 而不是 200,在响应数据中带有标记。
这是我简化的测试用例:
from rest_framework.test import APITestCase
from django.contrib.auth import get_user_model
# Create your tests here.
User = get_user_model()
class UserAuthTestCase(APITestCase):
username = "someuser"
password = "1234pass"
def setUp(self):
self.user = User.objects.create(
username=self.username,
password=self.password
)
def test_successful_login_gives_200(self):
response = self.client.post(
'/auth/token/',
{
'username': self.username,
'password': self.password
},
format='json'
)
self.assertEqual(response.status_code, 200)
其余框架配置设置为仅使用 simplejwt 身份验证。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
当使用 User.objects.create
创建 User
时,您设置的密码没有 散列 所以当您稍后尝试验证用户时,您最终会比较哈希密码值与数据库中的原始未哈希密码。使用 User.objects.create_user
通过在内部调用 set_password
来处理散列。