You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:37:31