Die JWT-basierte Authentifizierung funktioniert gut mit POST-Anfragen, die von Mobilgeräten und vom "Advanced Rest Client" gesendet werden. Sie schlägt jedoch fehl, wenn der Django-Testclient verwendet wird. Der Client empfängt das Token erfolgreich, wenn es angefordert wird. Beim Versuch, mit diesem Token auf eine eingeschränkte Sicht zuzugreifen, wird jedoch die folgende Antwort angezeigt.Testen der Authentifizierung mit REST Framework JWT?
"Authentifizierungsdaten wurden nicht bereitgestellt."
Der Testfall:
def test_get_token(self):
response = self.client.post("/auth/api/get_token/", {"username": "Heffalumps", "password": "Woozles"})
self.assertEqual(response.status_code, 200, "The token should be successfully returned.")
response_content = json.loads(response.content.decode('utf-8'))
token = response_content["token"]
# The following request fails
response = self.client.post("/auth/api/authenticated/", {}, Authorization='JWT ' + token)
response_content = json.loads(response.content.decode('utf-8'))
self.assertEqual(response_content["authenticated"], "mooh", "The user should be able to access this endpoint.")
Outgoing Anfrage von Test-Client:
Die eingeschränkte Sicht:
class RestrictedView(APIView):
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
def post(self, request):
response_data = json.dumps({"authenticated": "mooh"})
return HttpResponse(response_data, content_type='application/json')
Bin ich etwas aus dem Testfall fehlt?
Vielen Dank! Habe meinen Tag gerettet. –
Ich habe die Django Rest API mit Token-Authentifizierung verwendet und muss sie ändern in: Antwort = self.client.get ('/ api/satururl', {}, HTTP_AUTHORIZATION = 'Token {}'. Format (self.token)) –