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

