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

Django REST API通过Token获取用户信息报错问题排查

Django REST API Token获取用户信息的错误排查与修复

核心错误分析

  • 序列化器使用逻辑混乱:你已经配置了TokenAuthentication和IsAuthenticated权限,只要请求携带有效Token,request.user就是已认证通过的用户,完全不需要再通过序列化器解析token、重新获取用户。视图里serializer = UserSerializer(data=request.user)把User对象传给data参数是错误的——data仅接收字典类型数据,且这套逻辑和当前认证流程完全脱节。
  • 序列化器定义错误:
    • 拼写错误:acess_token应为access_token
    • 冗余设计:继承Serializer却添加Meta类指定Model,正确做法是用ModelSerializer简化用户模型序列化
    • 多余字段:acess_token字段完全没必要,Token认证已由DRF认证中间件处理,序列化器无需额外定义该字段
  • 冗余用户获取逻辑:视图中调用jwt.get_user属于画蛇添足,认证通过后request.user就是当前合法用户。

修正后的代码

1. 序列化器修正

from rest_framework import serializers
from django.contrib.auth.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ["id", "username", "email"]

2. 视图修正

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from .serializers import UserSerializer

class getUserInfoView(APIView):
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]

    def get(self, request):
        # 直接序列化已认证的当前用户
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

3. URL配置保持不变

path('api/me/', getUserInfoView.as_view(), name='Personal-Information')

验证步骤

  1. 确保已为目标用户生成Token(可通过DRF自带的obtain_auth_token视图获取)
  2. 请求/api/me/时,在请求头中携带Authorization: Token <你的用户Token>
  3. 此时会正确返回当前认证用户的id、username和email信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:18:22