2016-03-29 7 views
0

Ich versuche, Authentifizierung für die eingehende Anfrage konfigurieren, aber ich bin nicht in der Lage, die erforderlichen Schritte zu verstehen, um es zu erreichen.Nicht authentifizieren mit dem django Rest-Framework (request.user = AnonymousUser)

ich die Schritte in der documentation

Erste bereitgestellt gefolgt sind, bearbeitet ich die setting.py für die Auth-Einstellungen:

INSTALLED_APPS = [ 
    ..., 
    'rest_framework', 
    'rest_framework.authtoken', 
    ..., 
] 

    REST_FRAMEWORK = { 
     'DEFAULT_AUTHENTICATION_CLASSES': (
      'rest_framework.authentication.BasicAuthentication', 
      'rest_framework.authentication.TokenAuthentication', 
     ) 
    } 

Im view.py:

@csrf_exempt 
def uuid_details(request, uuid): 

    if request.method == 'GET': 
     print "user: " + str(request.user) # user: AnonymousUser 

Also, wenn ich rufe über Rest API, in der obigen Zeile werde ich als ausgegeben. Nach meinem Verständnis sollte ich das authentifizierte Objekt User erhalten.

Ich kann das Token abrufen und an die Rest-API übergeben.

>>> Token.objects.get(user=user) 
<Token: 95119884347cf000caab9d2596b9a18a9103f1db> 

So kann ich nicht verstehen, wie die Authentifizierung in Django Rest Framework funktioniert.

+0

Wie machen Sie die 'Anfrage' an die Ansicht mit 'AnonymousUser'? – iulian

+0

@Iulian folgende ist die Anfrage curl -X GET http://127.0.0.1:8000/uuid/O5gn2Pl7RTqQc7PR4HDQjw/details/ -H 'Autorisierung: Token 95119884347cf000caab9d2596b9a18a9103f1db' –

Antwort

1

Es sieht so aus, als ob Sie eine normale Django-Ansicht haben, daher wird keiner der restlichen Framework-Authentifizierungscodes ausgeführt.

def uuid_details(request, uuid): 

könnten Sie verwenden den api_view Dekorateur diese in eine Ruhe Rahmen Ansicht zu drehen.

from rest_framework.response import Response 
from rest_framework.decorators import api_view 

@api_view(['GET']) 
def uuid_details(request, uuid): 
    return Response({"message": "user: " + str(request.user)} 
+0

Dank @Alasdair es funktioniert. –

0

Zwei Dinge:

  1. @csrf_exempt funktioniert nicht auf DRF Ansichten. Es ist für rohe Django-Einsen.
  2. Sie haben das nicht DRF decorator for function views

verwenden Es sollte funktionieren, wenn diese beiden Punkte festgelegt sind.

+0

für den Vorschlag. –

Verwandte Themen