Заголовок авторизации не отправляется при использовании документации 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
. Вот пример:
Как вы можете видеть в документации 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, только с указанием моего пользовательского префикса.