Django TokenAuthentication fehlt die "Ermächtigung" - http-header
Ich versuche, die TokenAuthentication mit einer meiner Ansichten.
Dokumentiert, wie in https://www.django-rest-framework.org/api-guide/authentication/, ich fügen Sie die token, die ich erhielt, von der Anmeldung eines HTTP-headers namens: 'Genehmigung' in der Anfrage kann ich schicken.
Das problem ist, dass in meinem unittests schlägt die Authentifizierung fehl.
Der Blick in die TokenAuthentication Klasse sehe ich, dass der header geprüft wird, ist 'HTTP_AUTHORIZATION' und nicht 'Autorisierung'
Ansicht, die ich verwende:
class DeviceCreate(generics.CreateAPIView):
model = Device
serializer_class = DeviceSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
Ändern der header auf 'HTTP_AUTHORIZATION' scheint zu funktionieren, aber etwas fühlt sich falsch an.
Bin ich etwas fehlt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ganz richtig, wenn dabei lookups in der Anfrage
META
dict, die Kopfzeilen, die Sie eigentlich suchen, sind mit der vorangegangenenHTTP_
, sorequest.META.get('HTTP_AUTHORIZATION', '')
ist eigentlich auf der Suche bis dieAuthorization
- header in der Anforderung.Ich havn ' T überprüft, wie der test-client aussieht, aber ich glaube, dass die Einstellung
HTTP_AUTHORIZATION
ist, was Sie tun müssen, um das äquivalent von tatsächlich einstellen derAuthorization
header. Wenn Sie tatsächlich eine http-Anfrage sollten Sie feststellen, dass die Einstellung der auth-header funktioniert genau wie man es erwarten würde.Sehen
request.META
Dokumentation hier: https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.METABearbeiten:
Django-docs auf der Suche up-Header in
request.META
:Django-docs auf Einstellung der Header mit dem test-client:
Tom ' s Antwort ist in Ordnung, aber nicht vollständig.
Kann der code einwandfrei funktionieren dev environnement (mit
runserver
), aber wenn Sie versuchen Sie es in ein WSGI-server (Apache in meinem Fall), kann der server-Streifen aus dem Authorization-header !Finden Sie auf Boone ' s Blog eine gute Lösung für Ihre Apache-conf zu halten, der Authorization-header in der Anfrage und damit es funktioniert großartig: