DRF - Djoser возвращает Unauthorized для всех запросов - PullRequest
0 голосов
/ 06 апреля 2020

Я использую пакет Djoser Python для создания аутентификации для моего приложения.

Как указано в документации, я обновил settings.py, как показано ниже -

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
}

Также я добавили permission_class в APIView

allow_classes = [IsAuthenticated]

Я могу получить токен refresh и access с учетными данными -

{
    "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU4NjI1MDYyOCwianRpIjoiZmU5MjA0NzE2NWIwNGNjYmE5YzgzMWYwMDY5Njk4NzQiLCJ1c2VyX2lkIjoxfQ.I-IPEVrMchQWfGKv80x8pcIMHkEoMlUci7eRZGKjzOA",
    "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTg2MTY0NTI4LCJqdGkiOiI4NGVlMmQ1OWUzYTI0MWU5OGJhNmQyMDBlNTc5NjQ5YSIsInVzZXJfaWQiOjF9.4InHnERd9u7nt8-iaNjt08Fd9169-VVAIYgBGa08euE"
}

Но когда я пытаюсь отправить POST-запрос с помощью того же токена access от почтальона, я получаю эту ошибку -

{
    "detail": "Authentication credentials were not provided."
}

Вот скриншот запроса почтальона -

enter image description here

enter image description here

1 Ответ

1 голос
/ 09 апреля 2020

Я полагаю, что проблема здесь в том, что заголовок аутентификации предоставляется Django Rest Framework.

Вы предоставляете заголовок аутентификации как:

'Authorization': 'Bearer XXXXXXXX'

Когда для аутентификации токена DRF требуется:

'Authorization': 'Token XXXXXXXX'

https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication

Используйте предложенный выше заголовок или создайте подкласс TokenAuthentication для поддержки ключевого слова Bearer:

https://github.com/encode/django-rest-framework/commit/ffdac0d93619b7ec6039b94ce0e563f0330faeb1

...