Django DRF Как принудительно войти в систему на swagger
Я использую Django Rest Framework в проекте с swagger для документации.
Доступ к пользовательскому интерфейсу Swagger может получить каждый, кто знает его URL. Возможно ли добавить метод аутентификации, чтобы только люди с правильным доступом могли видеть и читать документы swagger?
on urls.py
schema_view = get_schema_view(
openapi.Info(
title="API Docs",
default_version='v1',
description="beautiful and long text",
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=[permissions.AllowAny],
)
...
urlpatterns = [
url(
r'^swagger/$',
schema_view.with_ui('swagger', cache_timeout=0),
name='schema-swagger-ui'
),
url(
r'^redoc/$',
schema_view.with_ui('redoc', cache_timeout=0),
name='schema-redoc'
),
]
on settings.py
SWAGGER_SETTINGS = {
'SHOW_REQUEST_HEADERS': True,
'SECURITY_DEFINITIONS': {
'Bearer': {
'type': 'apiKey',
'name': 'Authorization',
'in': 'header',
},
'basic': {
'type': 'basic'
}
},
'USE_SESSION_AUTH': True,
'JSON_EDITOR': True,
'SUPPORTED_SUBMIT_METHODS': [
'get',
'post',
'put',
'delete',
'patch'
],
}
Вы хотите permission_required('myspecpermission',login_url="../mylogintouseswagger")
Подробнее об этом:
https://docs.djangoproject.com/en/4.0/topics/auth/default/#the-permission-required-decorator
Вы должны добавить в свой urls.py:
urls.py
from django.contrib.auth.decorators import permission_required
...
urlpatterns = [
url(
r'^swagger/$',
permission_required('MySpecPermissionForSwagger',login_url="../mylogintouseswagger")(schema_view.with_ui('swagger', cache_timeout=0)),
name='schema-swagger-ui'
),
url(
r'^redoc/$',
permission_required('MySpecPermissionForRedoc',login_url="../mylogintousesredoc")(schema_view.with_ui('redoc', cache_timeout=0)),
name='schema-redoc'
),
]
MySpecPermissionForSwagger - это имя пользовательского разрешения из разрешений django. Подробнее об этом: https://docs.djangoproject.com/en/4.0/topics/auth/customizing/#custom-permissions