在Django Swagger的SECURITY_DEFINITIONS中添加Bearer前缀方法咨询
解决Django Swagger中JWT自动添加Bearer前缀的问题
很简单,你只需要调整Swagger的SECURITY_DEFINITIONS配置,把原来的apiKey类型改成http类型并指定Bearer scheme,Swagger UI就会自动帮你在token前加上Bearer 前缀了。
步骤1:更新Swagger配置
把你的配置改成下面这样:
'SECURITY_DEFINITIONS': { 'JWT': { 'type': 'http', 'scheme': 'Bearer', 'bearerFormat': 'JWT', # 可选,用来在Swagger里提示用户输入的是JWT格式的token 'in': 'header', 'name': 'Authorization', } }
这样修改后,当你在Swagger UI里点击「Authorize」按钮,输入你的JWT token时,Swagger会自动生成正确的Authorization: Bearer <你的token>请求头,不需要手动输入前缀。
步骤2:确认后端认证支持Bearer前缀
如果你用的是django-rest-framework-simplejwt这类主流的JWT库,它的默认认证类已经支持自动解析带Bearer 前缀的请求头了,不需要额外修改后端代码。
如果是自定义的认证类,记得在解析token时先去掉前缀,比如:
def authenticate(self, request): auth_header = request.META.get('HTTP_AUTHORIZATION') if not auth_header: return None # 拆分出Bearer前缀和token parts = auth_header.split() if parts[0].lower() != 'bearer': raise AuthenticationFailed('认证头格式错误,需要以Bearer开头') if len(parts) != 2: raise AuthenticationFailed('认证头格式错误') token = parts[1] # 后续的token验证逻辑...
测试正确的curl命令
现在你的curl请求也需要带上Bearer 前缀,正确格式如下:
curl -X GET "http://localhost:8000/api/customer/" -H "accept: application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjAzMTIyMzYyLCJqdGkiOiJkNzZhNWIwYTE1MmQ0ZWZlODZiN2E4ZTUzYWQ4NTA3YyIsInVzZXJfaWQiOjF9.8IdlDh"
内容的提问来源于stack exchange,提问作者Loran
相关产品推荐
相关产品推荐

