具有 FirebaseBackend 身份验证的 Django drf-spectacular
Django drf-spectacular with FirebaseBackend auth
提供尽可能多的上下文;我在使用 drf-spectacular
构建我的 API 文档时遇到两个问题;
使用我的默认配置,我什至无法加载文档页面,因为我有一个自定义的身份验证后端(使用 firebase_admin 5.2.0
),swagger(或 ReDoc)是我的 REST API,因此,必须传递有效令牌才能加载在文档端点中分配的页面(这在浏览器中是不可能的)。
其次,也是最重要的,我无法使用 drf-spectacular
配置我的自定义 firebase 身份验证来实现 Swagger 身份验证方法以针对我的 API 端点执行。如果可以在 Swagger 文档中添加令牌,我会很好,不需要拥有所有 Firebase 身份验证凭据、URL 和流程。
- api/urls.py
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)),
- settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'auth.backends.FirebaseBackend',
],
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
我尝试向我的 SPECTACULAR_SETTINGS
添加许多不同的配置,但均未成功。
提前致谢!!
- 默认情况下,spectacular 使用
'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny'],
,即使未通过身份验证也应允许打开 swagger 页面。也许 FirebaseBackend
很难保释,这会阻止你到达 AllowAny
。试试这个将 Firebase 排除在模式视图的等式之外:
SPECTACULAR_SETTINGS = {
...
'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny']
'SERVE_AUTHENTICATION': [],
}
- 您需要为 Firebase 编写一个 OpenApiAuthenticationExtension,因为它目前不属于 spectacular 的一部分。
提供尽可能多的上下文;我在使用 drf-spectacular
构建我的 API 文档时遇到两个问题;
使用我的默认配置,我什至无法加载文档页面,因为我有一个自定义的身份验证后端(使用
firebase_admin 5.2.0
),swagger(或 ReDoc)是我的 REST API,因此,必须传递有效令牌才能加载在文档端点中分配的页面(这在浏览器中是不可能的)。其次,也是最重要的,我无法使用
drf-spectacular
配置我的自定义 firebase 身份验证来实现 Swagger 身份验证方法以针对我的 API 端点执行。如果可以在 Swagger 文档中添加令牌,我会很好,不需要拥有所有 Firebase 身份验证凭据、URL 和流程。
- api/urls.py
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)),
- settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'auth.backends.FirebaseBackend',
],
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
我尝试向我的 SPECTACULAR_SETTINGS
添加许多不同的配置,但均未成功。
提前致谢!!
- 默认情况下,spectacular 使用
'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny'],
,即使未通过身份验证也应允许打开 swagger 页面。也许FirebaseBackend
很难保释,这会阻止你到达AllowAny
。试试这个将 Firebase 排除在模式视图的等式之外:
SPECTACULAR_SETTINGS = {
...
'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny']
'SERVE_AUTHENTICATION': [],
}
- 您需要为 Firebase 编写一个 OpenApiAuthenticationExtension,因为它目前不属于 spectacular 的一部分。