使用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
相关产品推荐
相关产品推荐

