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

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