如何配置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
相关产品推荐
相关产品推荐

