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

如何配置Django REST framework视图识别Authorization请求头?

解决方法

1. 修正视图类的认证配置字段名

你的视图类中认证类配置的字段名存在拼写错误,DRF要求的认证类配置字段为复数形式authentication_classes,你少写了末尾的s,导致配置不生效:

class UserProfileView(RetrieveAPIView):
    permission_classes = (IsAuthenticated,)
    # 修正为复数形式,值用元组包裹
    authentication_classes = (JSONWebTokenAuthentication,)

2. 调整Authorization头格式,添加标准前缀

djangorestframework-jwt默认要求Authorization头的格式为Bearer <token>,你当前请求没有加前缀,DRF无法识别到有效凭证。

修正后的curl请求:

curl --header "Content-type: application/json" --header "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyLCJ1c2VybmFtZSI6ImRhdmUiLCJleHAiOjE2MzM5ODMwMTUsImVtYWlsIjoiZGF2ZUBleGFtcGxlLmNvbSJ9.un6qNSdOQ-ExJxAQAIJIqwxyHeidx_2pXP8f1_mqLZY" "http://localhost:8000/profile/"

如果需要自定义前缀,可以在settings.py的JWT_AUTH配置中修改:

JWT_AUTH = {
    # 保留原有配置不变,新增以下配置
    'JWT_AUTH_HEADER_PREFIX': 'JWT', # 自定义前缀后,请求头格式改为 Authorization: JWT <token>
}

3. (可选)简化视图逻辑

你已经配置了JWT认证类,认证通过后DRF会自动将当前登录用户赋值给request.user,不需要手动解码token获取用户,可直接简化代码:

def get(self, request):
    try:
        status_code = status.HTTP_200_OK
        response = {
            'success': 'true',
            'status code': status_code,
            'message': 'User profile fetched successfully',
            'data': {
                'email': request.user.email
            }
        }
    # 后续异常处理逻辑保持不变即可

补充说明(部署场景)

如果服务部署在Nginx等反向代理后面,需要在代理配置中添加透传Authorization头的规则,避免请求头被过滤:

location / {
    # 其他原有配置不变,新增以下配置
    proxy_set_header Authorization $http_authorization;
}

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:02