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

Django DRF下使用默认AUTH_USER模型结合JWT Token传递用户数据

Django DRF 基于默认auth_user模型向JWT传递用户字段实现方案

以下方案无需自定义用户模型,直接复用Django原生auth_user表,可实现将first_name、last_name等字段写入JWT payload或登录接口返回值:

代码实现

序列化器(serializers.py)

分两种实现场景,可按需选择:

  • 场景1:将字段写入JWT payload(前端任意时间解码token都能拿到字段值)
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from django.contrib.auth.models import User

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)
        # 往JWT payload中添加自定义字段
        token['username'] = user.username
        token['first_name'] = user.first_name
        token['last_name'] = user.last_name
        return token
  • 场景2:仅在登录接口返回值中附带字段(不写入JWT payload,仅登录时返回一次)
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from django.contrib.auth.models import User

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        data = super().validate(attrs)
        # 往登录响应中添加自定义字段
        data['username'] = self.user.username
        data['first_name'] = self.user.first_name
        data['last_name'] = self.user.last_name
        # 不需要refresh字段可自行打开下方注释删除
        # data.pop('refresh', None)
        return data

视图(views.py)

from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import MyTokenObtainPairSerializer

class CustomTokenObtainPairView(TokenObtainPairView):
    # 替换为自定义的序列化器
    serializer_class = MyTokenObtainPairSerializer

路由配置(urls.py)

from django.urls import path
from .views import CustomTokenObtainPairView

urlpatterns = [
    # 替换原有的JWT登录路由即可
    path('api/token/', CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:09:02