0

我正在使用 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',
    )
}
4

1 回答 1

1

在创建时UserUser.objects.create您正在设置密码而不进行哈希,因此当您稍后尝试对用户进行身份验证时,您最终会将哈希密码值与数据库中的原始未哈希密码进行比较。使用User.objects.create_userwhich 通过内部调用来处理散列set_password

于 2020-07-13T22:09:42.780 回答