如何使用 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 来处理散列。