具有 FirebaseBackend 身份验证的 Django drf-spectacular

Django drf-spectacular with FirebaseBackend auth

提供尽可能多的上下文;我在使用 drf-spectacular 构建我的 API 文档时遇到两个问题;

  1. 使用我的默认配置,我什至无法加载文档页面,因为我有一个自定义的身份验证后端(使用 firebase_admin 5.2.0),swagger(或 ReDoc)是我的 REST API,因此,必须传递有效令牌才能加载在文档端点中分配的页面(这在浏览器中是不可能的)。

  2. 其次,也是最重要的,我无法使用 drf-spectacular 配置我的自定义 firebase 身份验证来实现 Swagger 身份验证方法以针对我的 API 端点执行。如果可以在 Swagger 文档中添加令牌,我会很好,不需要拥有所有 Firebase 身份验证凭据、URL 和流程。

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 添加许多不同的配置,但均未成功。

提前致谢!!

  1. 默认情况下,spectacular 使用 'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny'],,即使未通过身份验证也应允许打开 swagger 页面。也许 FirebaseBackend 很难保释,这会阻止你到达 AllowAny。试试这个将 Firebase 排除在模式视图的等式之外:
SPECTACULAR_SETTINGS = {
    ...
    'SERVE_PERMISSIONS': ['rest_framework.permissions.AllowAny']
    'SERVE_AUTHENTICATION': [],
}
  1. 您需要为 Firebase 编写一个 OpenApiAuthenticationExtension,因为它目前不属于 spectacular 的一部分。