Чтобы дать как можно больше контекста; У меня есть две проблемы при использовании drf-spectacular
для создания документации по API;
С моей конфигурацией по умолчанию я даже не могу загрузить страницу документации, потому что у меня есть собственный бэкенд аутентификации (с использованием firebase_admin 5.2.0
), swagger (или ReDoc) являются частью моего REST API, поэтому мне нужно будет передать действительный токен для загрузки страницы размещается в конечной точке документации (что невозможно в браузере).
Во-вторых, и это самое главное, я не могу настроить свою пользовательскую аутентификацию firebase с помощью drf-spectacular
для реализации метода аутентификации Swagger для выполнения на моих конечных точках API. Я был бы в порядке, имея возможность добавить токен в документ Swagger, мне не нужно иметь все учетные данные, URL-адреса и поток для аутентификации Firebase.
router = routers.DefaultRouter()
urlpatterns = [
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
path('api/schema/swagger/', SpectacularSwaggerView.as_view(), name='swagger'),
path('api/schema/redoc/', SpectacularRedocView.as_view(), name='redoc'),
# _____________________FIREBASE AUTH ______________________
path('api-auth/', include('rest_framework.urls')),
path('', include(router.urls)),
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'auth.backends.FirebaseBackend',
],
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
Я безуспешно пытался добавить много разных конфигураций в свой SPECTACULAR_SETTINGS
.
Заранее спасибо!!
'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny'],
должно позволять открывать страницу чванства, даже если оно не аутентифицировано. Может быть, FirebaseBackend
тяжело прыгает, что мешает вам когда-либо добраться до AllowAny
. Попробуйте это, чтобы вывести Firebase из уравнения для представлений схемы:SPECTACULAR_SETTINGS = {
...
'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny']
'SERVE_AUTHENTICATION': [],
}
1) круто! 2) эффектный должен знать, что делать, когда он встречает FirebaseBackend
в вашем представлении. Этому расширению не нужно ничего реализовывать, просто опишите, как аутентификация ожидает этого бэкенда. Этот пример в ссылке почти завершен. Просто введите имя класса Auth, и если вы используете носитель, просто return {'type': 'http','scheme': 'bearer', }
. Поместите эти расширения где-нибудь в свой код, где они будут импортированы, и все готово.
Привет @Insa, по поводу: 1- Это отлично сработало, чем ты! (
'SERVE_AUTHENTICATION': []
) 2- Нельзя ли просто настроить эффектный с аутентификацией токена Oauth (или аналогичной) и использовать там токен Firebase, который я получаю от Firebase API с помощью Postman?