2016-04-04 19 views
0

Ich mache eine eckige App, die in einer Django-Site mit einem Rest API authentifiziert. Im doc von DRF geben sie an, dass ein verweigert die Benutzerauthentifizierung in zwei Fehler führen wird, HTTP 401 und HTTP 403, wie folgt:Django Rest Framework Authentifizierung Fehler

Wenn ein nicht authentifizierter Anfrage Erlaubnis dort verweigert wird zwei verschiedene Fehlercodes sind, die geeignet sind, .

  1. HTTP 401 Unauthorized
  2. HTTP 403 Permission
  3. verweigert

Howenever, wenn ich versuche, mit einigen Dummy-Daten zu authentifizieren, das ist falsch absichtlich, erhalte ich Fehler Antwort HTTP 400 und mit non_field_errors. Was ist das Problem hier?

Zuerst mache ich eine einfache Authentifizierung mit dem Benutzernamen und dem Passwort, dies gemacht, um das Benutzer-Token zu erhalten, das für andere Operationen auf der Website benötigt wird.

Ich bin ein Verfahren unter Verwendung eines Expering Auth-Token zu erhalten, können Sie es unten sehen:

Klasse ObtainExperingAuthToken (ObtainAuthToken): def Post (self, Anfrage, * args, ** Kargs): Serializer = self.serializer_class (data = request.data)

if serializer.is_valid(): 
     print serializer 
     user = UserProfile.objects.get(email=serializer.data['username']) 
     token, created = Token.objects.get_or_create(user=user) 

     utc_now = timezone.now() 
     if not created and token.created < utc_now - datetime.timedelta(hours=24): 
      token.delete() 
      print serializer.data 
      token = Token.objects.create(user=serializer.data['user']) 
      token.created = datetime.datetime.utcnow() 
      token.save() 

     groups = [group.name for group in user.groups.all()] 
     response_data = { 
      'email': user.email, 
      'token': token.key, 
      'groups': groups 
     } 

     return HttpResponse(json.dumps(response_data), content_type='application/json') 
    return HttpResponse(serializer.errors, status=400) 

@Edit Der Wert für REST_FRAMEWORK

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': [ 
     'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly', 
    ], 
    'DEFAULT_AUTHENTICATION_CLASSES': [ 
     'rest_framework.authentication.SessionAuthentication', 
     'accounts.authentication.ExpiringTokenAuthentication', 
    ], 
    'DEFAULT_PARSER_CLASSES': [ 
     'rest_framework.parsers.JSONParser', 
     'rest_framework.parsers.FormParser', 
     'rest_framework.parsers.MultiPartParser', 
     'rest_framework.parsers.FileUploadParser' 
    ] 
} 

Antwort

0

Erstens, obwohl es nicht sehr klar von Ihrer Erklärung ist, aber ich schätze, Sie erhalten 400 Fehler in der API verantwortlich für die Bereitstellung von Benutzerzugriffstoken. Da es offensichtlich keine Authentifizierung auf dieser API gibt (außer der Client-Authentifizierung vielleicht), erhalten Sie wirklich einen fehlerhaften Anforderungsfehler, da Sie ihn mit ungültigen Daten versorgen, wie Sie selbst erwähnt haben. Authentifizierungsfehler tritt auf, wenn Sie auf eine API zugreifen, die keinen nicht authentifizierten Zugriff zulässt. Dies sollte nicht der Fall sein, wenn die API das Authentifizierungstoken bereitstellt.

Zweitens, um Authentifizierungsfehler zu erhalten, müssen Sie Authentifizierungsklassen zu REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] oder zu der AUTHENTICATION_CLASSES Variable der Sichtklasse hinzufügen.

+0

Sorry, ich werde das klären. Ich stelle das Benutzerzugriffstoken nicht zur Verfügung, sondern gebe einen falschen Benutzernamen und ein falsches Passwort an einen Endpunkt, der mir das Zugriffstoken mit dem Backend zur Verfügung stellen soll, um den Benutzer mit den bereitgestellten Daten zu authentifizieren. Ich hatte erwartet, Unatourized oder Forbbiden zu empfangen, wie auch immer ich stattdessen eine schlechte Anfrage erhalte. Ich werde die Frage mit den 'REST_FRAMEWORK' Werten bearbeiten. –

Verwandte Themen