Я использую простой JWT для аутентификации в проекте DRF. Когда я пытаюсь получить доступ к этому api, он показывает bad_authorization_header

Я использую простой jwt для моего проекта django rest framework. Я пытался получить доступ с помощью барьерного токена в postman, но он выдает эту ошибку

{
    "detail": "Authorization header must contain two space-delimited values",
    "code": "bad_authorization_header"
}

Код моего файла настроек

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}


SIMPLE_JWT = {
  "ACCESS_TOKEN_LIFETIME": timedelta(days=15),
  "REFRESH_TOKEN_LIFETIME": timedelta(days=1),
  "ROTATE_REFRESH_TOKENS": True,
  "AUTH_HEADER_TYPES": ('Bearer',),
  "AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken", )   
}

просматривает код файла

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def all_users(request):
  users = CustomUser.objects.all().order_by('id')
  serializers = UserSerializer(users, many=True)
  return Response({
    'All users':serializers.data
  }, status.HTTP_200_OK)

в postman мой ввод для токена Bearer был таким

Носитель < токена доступа >

Ошибка во время процесса get_raw_token для класса JWTAuthrozation в библиотеке simplejwt.

Функция get_raw_token проверяет правильность значения поля Authorization Header, переданного клиентом, и возвращает только значение токена.

class JWTAuthentication(authentication.BaseAuthentication):
    ...
    def get_raw_token(self, header: bytes) -> Optional[bytes]:
        """
        Extracts an unvalidated JSON web token from the given "Authorization"
        header value.
        """
        parts = header.split()
        if len(parts) == 0:
            # Empty AUTHORIZATION header sent
            return None

        if parts[0] not in AUTH_HEADER_TYPE_BYTES:
            # Assume the header does not contain a JSON web token
            return None

        if len(parts) != 2:
            raise AuthenticationFailed(
                _("Authorization header must contain two space-delimited values"),
                code="bad_authorization_header",
            )

        return parts[1]

В последнем условном операторе задающий вопрос был истинным, что привело к ошибке.

Здесь значение переменной части - это значение, полученное путем разделения значения поля заголовка авторизации, доставленного клиентом, на пробелы.

enter image description here

Если вы посмотрите на мой тест, то значение Authorization будет таким

"Носитель {access_token}"

В приведенном выше случае метод get_raw_token присваивает эти значения переменной parts.

[b'Bearer', b'{access_token}']

Мой тест сдан в правильной форме, так что проблем нет.

Ошибка, которая возникла у вас, это когда количество частей не равно 2.

Это происходит, когда в значении Authorization слишком много пробелов.

вот так enter image description here Я дал .ey пустое место, в отличие от предыдущих.

Убедитесь, что задающий вопрос передал значение Authorization в правильной форме при его передаче.

"Authorization": "Bearer {access_token}"

Вернуться на верх