Заголовок авторизации не отправляется при использовании документации Swagger на drf-spectacular

Я использую drf-spectacular для документирования и тестирования моей конечной точки. Мой код выглядит следующим образом:

@extend_schema(
    parameters=[
        OpenApiParameter(name='Authorization', description='Authorization token', required=True, type=str, location=OpenApiParameter.HEADER),
        OpenApiParameter(name='my-key1', description='My key 1 info', required=True, type=str, location=OpenApiParameter.HEADER),
        OpenApiParameter(name='my-key2', description='My key 2 info', required=True, type=str, location=OpenApiParameter.HEADER),
    ],
    description='Info about the endpoint',
    responses={
        200: inline_serializer(
                name='Successfull response',
                fields={
                    "result_code": serializers.IntegerField(default=200),
                    "result_description": serializers.CharField(default="Transaccion Exitosa"),
                    "data": DocumentSerializer(many=True),
                }
            ),                         
    },
)
@api_view(["GET"])
def my_endpoint_function(request):
    pass

Как вы можете видеть, я объявляю 3 параметра заголовков, Authorization, my-key1 и my-key2. Но когда я пытаюсь использовать документацию Swagger, отправляются только my-key1 и my-key2. Вот пример:

enter image description here

Как вы можете видеть в документации Swagger, я отправляю три заголовка, о которых я говорил выше, но в curl отправляются только два из них. Кто-нибудь знает, как это исправить? Мне нужно проверить мои конечные точки в документации. Спасибо за ваше время

Я думаю, что вам нужно использовать кнопку "Авторизация", которая находится в правом верхнем углу экрана.

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

  • Может присутствовать более одного варианта
  • Любой класс, используемый в View.authentication_classes, будет отображаться
  • Возможно, вам придется вставить префикс JWT или Bearer в значение вручную

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

class MyAuthenticationScheme(OpenApiAuthenticationExtension):
    target_class = 'my_app.MyAuthentication'  # full import path OR class ref
    name = 'MyAuthentication'  # name used in the schema

    def get_security_definition(self, auto_schema):
        return {
            'type': 'apiKey',
            'in': 'header',
            'name': 'api_key',
        }

На моем скриншоте - мой пользовательский, который является копией существующих токенов bearer/jwt, только с указанием моего пользовательского префикса.

Authorize Button

Available Authorizers

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