我有Django Rest Framework站点使用dj-rest-auth作为验证。我在我的settings.py
中启用REST_USE_JWT = True
。我想测试一些需要rest_framework.permissions.IsAuthenticated
的API。我在测试中使用rest_framework.test.APIClient()
创建客户端。我尝试登录并查看一些API,但我得到了HTTP_401_UNAUTHORIZED
。我尝试登录后将用户名、电子邮件和密码发送到dj-rest-auth登录URL,并得到响应access_token,refresh_token等,然后使用credentials()
将其包含在header中,但客户端仍然得到HTTP_401_UNAUTHORIZED
,我不知道我是否做对了,请帮助我在测试中对客户端进行身份验证,提前感谢!
class ProfileTests(APITestCase):
@classmethod
def setUpTestData(cls):
cls.username = "test"
cls.email = "test@test.com"
cls.password = "test"
cls.user = get_user_model().objects.create_user(
username=cls.username,
email=cls.email,
password=cls.password,
)
cls.authenticated_client = APIClient()
response = cls.authenticated_client.post(
reverse("rest_login"),
{
"username": cls.username,
"email": cls.email,
"password": cls.password,
},
format="json"
)
cls.authenticated_client.credentials(HTTP_AUTHORIZATION=settings.JWT_AUTH_COOKIE + " " + response.data["access_token"])
1条答案
按热度按时间yhxst69z1#
您可以通过名为
rest_login
的dj-rest-auth登录url登录,然后获取access_token
。之后,您可以使用rest_framework.test.APIClient
中的credentials()
方法。此方法可用于设置标头,这些标头随后将包含在测试客户端的所有后续请求中。请注意,它使用
Bearer
而不是Token
作为Authorization头。要清除头,只需调用credentials()
(不带参数)示例cls.authenticated_client.credentials()
。如果您在使用dj-rest-auth进行测试期间有其他方法验证用户身份,请随时在此问题中添加您的答案