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

使用djangorestframework-simplejwt传合法token仍获AnonymousUser且签名无效求助

问题排查方案

1. 视图层认证触发问题

  • 你注释了permission_classes=[IsAuthenticated],DRF的身份认证逻辑默认会跟随权限校验触发,没有开启权限校验的情况下,不会主动执行JWT认证流程,request.user自然会保持为AnonymousUser。
  • 你继承的是CreateAPIView,该类默认仅处理POST请求,你自定义了GET方法,也没有主动调用认证逻辑,进一步导致认证失效,且GET请求本身无法正常获取request.data的负载内容。

修复代码参考:

class PostProductsReviewsView(CreateAPIView):
    permission_classes=[IsAuthenticated]
    serializer_class = ReviewsSerializer
    
    def post(self,request):
        # 原有业务逻辑直接移到post方法内即可
        print(request.user)
        user = request.user
        data=request.data
        stars=data.get('stars')
        title=data.get('title')
        review_content=data.get('review_content')
        product=data.get('product')
        query_data={
            'stars':stars,
            'title':title,
            'review_content':review_content,
            'product': product,
            'user':user,
            'is_active':True
        }
        serializer=ReviewsSerializer(data=query_data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

2. JWT签名校验失败问题

你使用的是HS256对称加密算法,jwt.io要验证签名必须填入你Django项目中对应的SECRET_KEY,注意要完全匹配:

  • 确认你粘贴到jwt.io的密钥和项目settings.py中的SECRET_KEY完全一致,不要多填空格、换行符
  • 确认你生成Token时使用的签名密钥就是配置的SECRET_KEY,没有自定义其他密钥
  • 确认你没有在生成Token之后修改过项目的SECRET_KEY,修改后原有Token的签名都会全部失效

3. 请求头格式校验

确认你发请求时的Authorization头格式完全符合要求:

  • 格式为Bearer <你的access_token>,Bearer和token之间必须有且仅有1个空格
  • 确认你传递的是access_token,不是refresh_token,refresh token仅用于刷新凭证,不能用于接口身份认证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:18:05