之前我们有一个单体,但现在我们正在转向微服务架构,这里是我的drf-spectaulous的设置,但我没有像以前那样的授权按钮,完全使用此设置而不是自定义身份验证是
rest_framework_simplejwt.authentication.JWTAuthentication
,
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
'DEFAULT_AUTHENTICATION_CLASSES': ('custom.custom_authentication.CustomAuthentication',),
}
SPECTACULAR_SETTINGS = {
'TITLE': 'My Title',
'DESCRIPTION': 'My description',
'VERSION': '0.0.1',
'SERVE_INCLUDE_SCHEMA': False,
'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAdminUser'],
'SERVE_AUTHENTICATION': [
'rest_framework.authentication.SessionAuthentication',
'custom.custom_authentication.CustomAuthentication',
],
'SWAGGER_UI_SETTINGS': {"filter": True, "persistAuthorization": True}
}
看不到授权按钮可能是什么问题?
将
drf-spectacular
与 custom.custom_authentication.CustomAuthentication
而不是 JWTAuthentication
一起使用时,Swagger UI 中缺少“授权”按钮,这可能是由于与自定义身份验证类中的身份验证配置方式相关的多个因素造成的。这是帮助您排除故障的清单:
自定义身份验证类兼容性: 确保
CustomAuthentication
正确实施 authenticate_header
。 Swagger 需要此标头来触发授权提示。
from rest_framework.authentication import BaseAuthentication
class CustomAuthentication(BaseAuthentication):
def authenticate_header(self, request):
return 'Bearer'
此方法至关重要,因为它告诉 Swagger 应显示 Bearer 令牌的授权选项。
检查
SPECTACULAR_SETTINGS
的安全方案:
由于 drf-spectacular
依赖 OpenAPI 设置来显示授权选项,因此您可能需要显式定义您的安全方案。为您的自定义身份验证添加 SECURITY_DEFINITIONS
条目:
SPECTACULAR_SETTINGS = {
'TITLE': 'My Title',
'DESCRIPTION': 'My description',
'VERSION': '0.0.1',
'SERVE_INCLUDE_SCHEMA': False,
'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAdminUser'],
'SERVE_AUTHENTICATION': [
'rest_framework.authentication.SessionAuthentication',
'custom.custom_authentication.CustomAuthentication',
],
'SWAGGER_UI_SETTINGS': {"filter": True, "persistAuthorization": True},
'SECURITY_DEFINITIONS': {
'CustomAuth': {
'type': 'http',
'scheme': 'bearer',
'bearerFormat': 'JWT',
},
},
'SECURITY': [{'CustomAuth': []}], # Ensures the scheme is used by default
}
此配置告诉 Swagger 使用 Bearer 令牌进行授权。
确保
persistAuthorization
已启用:
确认 "persistAuthorization": True
已设置在 SWAGGER_UI_SETTINGS
下,它已在您的设置中。此设置使授权标头在页面重新加载时保持活动状态。
重新检查权限和身份验证: 如果您在开发中进行测试,请确保您的自定义身份验证和权限正确返回
IsAdminUser
或您可能需要的任何其他权限。
清除缓存并刷新 UI: 有时 Swagger UI 会缓存设置,尤其是在开发期间。清除浏览器缓存并刷新页面以确保更改生效。
这些步骤应有助于使用自定义身份验证类恢复“授权”按钮。如果调整后该按钮仍然没有出现,请告诉我!