Django REST JSONWebTokenAuthentication + Angular (детали авторизации не предоставлены)

Пару дней я пытался заставить работать эту довольно простую настройку аутентификации.

Я использую плагин Django REST django-rest-framework-jwt для аутентификации веб-токена JSON.

При CURLing API он работает как положено.

введите описание изображения здесь

Хотя при отправке запросов через мое приложение Angular; Я постоянно получаю сообщение об ошибке «Несанкционированный доступ» с подробностями «Не предоставлены данные для авторизации». Однако при сканировании запросов можно четко увидеть, что он присутствует (токен в запросе действителен, поскольку я использовал его в CURL ':

введите описание изображения здесь

Я вставляю заголовок аутентификации через написанный мной перехватчик; что выглядит так:

 intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const auth = this.session.authorization;

    if (!auth) {
      return next.handle(req);
    } else {
      const newReq = req.clone({
        setHeaders: {
          Authorization: auth,
        },
      });

      return next.handle(newReq);
    }
  }

Далее параметры настройки JWT_AUTH определяются следующим образом:

JWT_AUTH = {
    'JWT_ENCODE_HANDLER':
    'rest_framework_jwt.utils.jwt_encode_handler',

    'JWT_DECODE_HANDLER':
    'rest_framework_jwt.utils.jwt_decode_handler',

    'JWT_PAYLOAD_HANDLER':
    'rest_framework_jwt.utils.jwt_payload_handler',

    'JWT_PAYLOAD_GET_USER_ID_HANDLER':
    'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',

    'JWT_RESPONSE_PAYLOAD_HANDLER':
    'auth.views.jwt_response_payload_handler',

    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_GET_USER_SECRET_KEY': None,
    'JWT_PUBLIC_KEY': None,
    'JWT_PRIVATE_KEY': None,
    'JWT_ALGORITHM': 'HS256',
    'JWT_VERIFY': True,
    'JWT_VERIFY_EXPIRATION': True,
    'JWT_LEEWAY': 0,
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
    'JWT_AUDIENCE': None,
    'JWT_ISSUER': None,

    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(seconds=3600),

    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
    'JWT_AUTH_COOKIE': None,
}

Настройки фреймворка следующие:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

Есть предложения по этому поводу? Я не уверен, что здесь происходит.

ИЗМЕНИТЬ

Заголовки запроса / ответа на вкладке сети:

введите описание изображения здесь


person LaurensVijnck    schedule 06.10.2018    source источник
comment
Проверьте фактические заголовки запросов на вкладке сети в Chrome Dev Tools и добавьте то, что вы видите.   -  person SiddAjmera    schedule 06.10.2018
comment
Отредактировал пост.   -  person LaurensVijnck    schedule 07.10.2018
comment
Ваш перехватчик запросов, верно? Почему бы не поискать заголовок в разделе Request Headers вместо Response Headers   -  person SiddAjmera    schedule 07.10.2018
comment
Я не совсем понимаю, что вы здесь пытаетесь сказать? Я разместил и ответ, и заголовки запроса на скриншоте выше.   -  person LaurensVijnck    schedule 07.10.2018
comment
Я хочу сказать, что, поскольку вы создали перехватчик запросов, чтобы добавить заголовок авторизации в свои ЗАПРОСЫ, в разделе заголовков запросов должен быть заголовок Authorization. Чего сейчас нет.   -  person SiddAjmera    schedule 07.10.2018
comment
Действительно, но я не могу понять почему. При печати объекта в консоли он обязательно присутствует. Я не уверен, что я здесь делаю не так ..   -  person LaurensVijnck    schedule 07.10.2018
comment
Позвольте нам продолжить это обсуждение в чате.   -  person SiddAjmera    schedule 07.10.2018


Ответы (1)


Итак, конец, это не имеет ничего общего с приложением Angular, но сервер не принимает CORS. Исправьте это с помощью объяснения в следующем сообщении:

https://www.techiediaries.com/django-cors/

person LaurensVijnck    schedule 07.10.2018