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

React+Django项目使用JWT令牌关联帖子与登录用户出现未授权错误

问题根因

  1. 认证类配置不匹配:你在settings.py中全局配置了JWT作为默认认证方式,但视图函数单独指定了TokenAuthentication(DRF自带的普通令牌认证,和JWT是两套完全不同的认证体系),请求携带的JWT令牌无法被该认证类识别,直接触发未授权错误。
  2. 补充问题:parser_classes直接写在函数体内不生效,需要通过装饰器声明才会生效,否则后续上传图片等表单数据会解析失败。

修复方案

步骤1:修正视图认证类和解析器配置

修改views.py代码如下:

# 先导入JWT认证类和解析器装饰器
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework.decorators import parser_classes
from rest_framework.parsers import MultiPartParser, FormParser

@api_view(["POST"])
# 要么直接删掉这行认证类装饰器,用settings的全局配置,要么替换为JWTAuthentication
@authentication_classes([JWTAuthentication])
@permission_classes([permissions.IsAuthenticated])
# 解析器要通过装饰器声明才生效
@parser_classes([MultiPartParser, FormParser])
def poultrycreate(request):
    print(request.user)
    serializer = PoultryCreateSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save(seller=request.user)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

步骤2:确认前端请求头格式正确

你在SIMPLE_JWT配置里指定了AUTH_HEADER_TYPES: ('JWT',),所以前端发起请求时必须携带正确格式的请求头:

Authorization: JWT 登录接口返回的access_token值

注意前缀是JWT不是默认的Bearer,前缀和令牌值之间用空格分隔。

验证方式

可以先用接口测试工具(Postman、Apifox等)手动添加上述Authorization头发起请求,确认接口正常返回后再对接前端,排除前端配置问题的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:36:00