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

Django中JWT认证AccessToken无法通过验证的问题排查

Django JWT认证异常:Token验证通过但Profile接口返回用户未找到

问题现象

在Django项目中用JWT做用户认证,出现以下异常:

  • 登录接口调用正常,Postman能拿到包含refresh和access token的响应,用jwt.io验证access token里的user_id完全正确
  • 把access token放进Bearer请求头访问Profile视图时,一直返回{"detail": "User not found", "code": "user_not_found"},没法通过认证拿到200响应
  • 已经配置过settings.py里的JWT相关项

相关代码

登录视图

# 用户登录
class UserLoginView(APIView):
    def post(self, req):
        serializer = UserLoginSerializer(data=req.data)
        if serializer.is_valid(raise_exception=True):
            user = serializer.validated_data['user']
            return Response({
                "message": "Login successful",
                "user_id": user.id,
                "username": user.username,
                "tokens": get_tokens_for_user(user)
            }, status=HTTP_200_OK)
        return Response(
            {"message": "Login failed"},
            status=HTTP_400_BAD_REQUEST
        )

用户Profile视图

# 用户信息视图
class UserProfileView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, req):
        print(f"Request user: {req.user}")
        print(f"User authenticated: {req.user.is_authenticated}")
        if req.user.is_authenticated:
            user = req.user
            serializer = UserProfileSerializer(user)
            return Response(serializer.data, status=HTTP_200_OK)
        return Response({"message": "Unauthorized"}, status=HTTP_401_UNAUTHORIZED)

排查与解决步骤

  • 检查JWT认证后端的用户查询逻辑:如果用了自定义用户模型,确认settings.py里的JWT_AUTH_USER_MODEL指向正确;排查JWT认证后端的get_user方法,确保从token解析出user_id后,能通过User.objects.get(id=user_id)找到用户,注意用户是否被软删除(比如is_active=False)
  • 核对Token生成与解析的字段一致性:查看get_tokens_for_user函数的实现,确认生成token时payload里的用户ID键名(默认是user_id)和认证后端解析时用的键名一致,别出现生成时用id但解析时查user_id的情况
  • 确认请求头格式正确:Postman里的请求头必须是Authorization,值为Bearer <你的access token>,注意Bearer和token之间要有一个空格,别加多余的引号或空格
  • 检查用户模型的认证属性:如果是自定义用户模型,必须继承AbstractBaseUser和PermissionsMixin,确保is_authenticated属性能正常返回正确状态
  • 查看Django调试日志:开启Django调试模式,看后台日志里的认证报错详情,通常能直接定位到用户查询失败的具体原因,比如用户ID不存在、数据库查询异常等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:18