2016-04-04 7 views
0

Я делаю угловое приложение, которое проходит аутентификацию на сайте django, используя rest api. В документ о DRF они заявляют, что аутентификация отказано пользователь будет приводить в двух ошибок, HTTP 401 и HTTP 403, следующим образом:Ошибки аутентификации Django Rest Framework

Когда неавторизованный запрос отклонен разрешение есть два различных кодов ошибок, которые могут быть пригодными ,

  1. HTTP 401 Несанкционированное
  2. HTTP 403 Отказано

Howenever, когда я пытаюсь проверить подлинность некоторых фиктивных данных, что это неправильно нарочно, я получаю ошибку ответа HTTP 400 и с non_field_errors. В чем проблема?

Сначала я делаю простую аутентификацию с именем пользователя и паролем, чтобы сделать токен пользователя, который понадобится для других операций на сайте.

Я использую метод, чтобы получить expering маркер аутентификации, вы можете увидеть ниже:

класс ObtainExperingAuthToken (ObtainAuthToken): Защиту пост (самостоятельно, запрос, * арг ** kargs): сериализатор = self.serializer_class (данные = 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 значение 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' 
    ] 
} 

ответ

0

Во-первых, хотя это не очень понятно из вашего объяснения, но я предполагаю, что вы получаете 400 ошибок в api, ответственных за предоставление токена доступа пользователя. Поскольку, очевидно, не было бы аутентификации на этом api (за исключением проверки подлинности клиента), так что вы действительно получаете ошибку с неправильным запросом, так как вы предоставляете ему недопустимые данные, как вы сами упоминали. Ошибка аутентификации возникает при доступе к api, который не разрешает доступ к неавторизованному доступу, что не должно иметь место для api, который фактически предоставляет токен аутентификации.

Во-вторых, чтобы получить ошибку аутентификации, вам необходимо добавить классы аутентификации либо REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'], либо в переменную AUTHENTICATION_CLASSES класса вида.

+0

Извините, что я это разъясню. Я не предоставляю токен доступа пользователя, я предоставляю неверное имя пользователя и пароль конечной точке, которая должна предоставить мне токен доступа с помощью бэкэнд, чтобы он мог аутентифицировать пользователя с данными предоставления. Я ожидал получить Unathourized или Forbbiden, но вместо этого я получаю Bad Request. Я отредактирую вопрос с помощью значений REST_FRAMEWORK. –

Смежные вопросы