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

Django REST Framework中JWT认证后如何获取当前用户信息?

关于Django JWT获取当前用户信息的问题解答

嘿,我来帮你梳理清楚这些问题,一步步解决👇

1. 客户端如何获取用户信息?

客户端只需要在请求你的get_current_user接口时,把登录拿到的JWT Token放在请求头里,格式是:

Authorization: Bearer <你的token内容>

后端通过JWT认证会自动识别出当前登录用户,返回对应的用户信息后,客户端就能直接展示用户名、头像、邮箱这些字段啦。

2. 你写的get_current_user方法是否正确?

思路是对的,但有个小错误需要修正:你代码里的return Response({format(data)})写法有问题,format(data)会把字典转成字符串,导致返回的不是标准JSON格式。应该直接返回Response(data)或者包装成Response({"data": data})。

不过更推荐用序列化器来处理,下面会详细说。

3. 能不能直接序列化request.user?当然可以!

手动构造data字典虽然能实现功能,但不够规范,也不利于后续扩展(比如新增字段时要手动修改字典)。用DRF的序列化器来序列化request.user是更优的方案,既简洁又能统一数据格式。

4. 有没有针对Auth-User的序列化器?

DRF没有内置的专属序列化器,但你可以轻松自己写一个ModelSerializer,适配默认的User模型(或你自定义的用户模型):

第一步:定义用户序列化器

from rest_framework import serializers
from django.contrib.auth.models import User  # 如果是自定义用户模型,替换成你的模型

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username', 'email', 'avatar']  # 这里列出你需要返回的字段,比如头像如果是自定义字段就加上

第二步:修改你的ViewSet方法

from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import viewsets

# 假设你的ViewSet是继承自ViewSet或ModelViewSet
class AuthViewSet(viewsets.ViewSet):
    @action(detail=False, methods=['get'])
    def get_current_user(self, request):
        # 直接用序列化器序列化当前用户
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

额外注意事项

  • 确保你的DRF配置了JWT认证,在settings.py里要加上:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

这样后端才能通过请求头里的Token正确识别request.user。

  • 如果你的用户模型是自定义的(比如继承了AbstractUser),只需要把序列化器里的model换成你的自定义模型,字段对应调整即可。

客户端请求示例(以Axios为例)

// 从本地存储取出登录时保存的Token
const token = localStorage.getItem('user_token');

axios.get('/api/auth/get-current-user/', {
  headers: {
    'Authorization': `Bearer ${token}`
  }
})
.then(res => {
  // 拿到用户信息后渲染到页面
  const user = res.data;
  document.querySelector('.username').textContent = user.username;
  document.querySelector('.user-avatar').src = user.avatar;
  document.querySelector('.user-email').textContent = user.email;
})
.catch(err => {
  // 处理Token过期或认证失败的情况
  console.error('获取用户信息失败:', err);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:27:46