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

使用JWT获取登录用户信息时出现User Not Found错误求助

问题排查与解决方案

核心排查方向

1. JWT认证配置校验

检查settings.py中的JWT相关配置:

  • 确认REST_FRAMEWORK的DEFAULT_AUTHENTICATION_CLASSES已包含rest_framework_simplejwt.authentication.JWTAuthentication
  • 核对SIMPLE_JWT配置里的USER_ID_FIELD是否和你的用户模型主键一致(默认是id,若自定义用户模型需对应调整)

2. 视图逻辑修正

查看views.py中customerprofileview/dealerprofileview的实现,常见错误点:

  • 错误从request.GET取用户ID,而非使用JWT认证后的request.user
  • 未添加JWT认证类,导致request.user为匿名用户
  • 用户与客户/经销商模型关联实例缺失

错误示例(反例):

class CustomerProfileView(APIView):
    def get(self, request):
        user_id = request.GET.get('user_id')
        customer = Customer.objects.get(user_id=user_id)
        # ...后续逻辑

正确写法:

from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework import status, Response

class CustomerProfileView(APIView):
    authentication_classes = [JWTAuthentication]
    permission_classes = [IsAuthenticated]

    def get(self, request):
        try:
            # 直接通过认证后的request.user获取关联实例
            customer = Customer.objects.get(user=request.user)
            serializer = CustomerProfileSerializer(customer)
            return Response(serializer.data)
        except Customer.DoesNotExist:
            return Response({"error": "User Not Found"}, status=status.HTTP_404_NOT_FOUND)

3. 模型关联检查

确认models.py中用户与客户/经销商的关联是否正确:

  • 必须用OneToOneField关联用户模型,且确保用户注册时已同步创建对应Customer/Dealer实例

示例模型:

from django.contrib.auth.models import User

class Customer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='customer_profile')
    full_name = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=15)
    # 其他字段

4. Postman请求验证

  • 确保请求头携带Authorization字段,格式为Bearer <access_token>(注意Bearer后有空格)
  • 用python manage.py inspecttoken <你的access_token>命令验证令牌有效性,排查过期或篡改问题

调试技巧

在视图中添加日志打印,确认用户认证状态:

def get(self, request):
    print("当前认证用户:", request.user)
    print("是否已认证:", request.user.is_authenticated)
    # ...后续逻辑

同时检查数据库,确认当前用户对应的Customer/Dealer记录是否存在。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:10:26