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

使用rest_framework_simplejwt登录时如何同时返回token和用户对象

Django DRF JWT登录接口返回自定义用户字段实现方案

1. 调整序列化器配置

你只需要在原有TokenObtainPairSerializer的基础上补充用户序列化逻辑即可,修改后的auth/serializers.py代码如下:

# auth/serializers.py
from rest_framework import serializers
from rest_framework_simplejwt.serializers import TokenObtainSerializer
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework_simplejwt.settings import api_settings
from django.contrib.auth import update_last_login
from .models import MUser

# 新增自定义用户序列化器,指定需要返回的用户字段
class MUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = MUser
        fields = ['username', 'first_name', 'last_name', 'email', 'role']

class TokenObtainPairSerializer(TokenObtainSerializer):
    @classmethod
    def get_token(cls, user):
        return RefreshToken.for_user(user)

    def validate(self, attrs):
        data = super().validate(attrs)

        refresh = self.get_token(self.user)

        data['refresh'] = str(refresh)
        data['access'] = str(refresh.access_token)

        # 新增用户字段序列化逻辑
        data['user'] = MUserSerializer(self.user).data

        if api_settings.UPDATE_LAST_LOGIN:
            update_last_login(None, self.user)

        return data

2. 确认路由绑定

确保你项目的路由配置中,登录接口指向你自定义的TokenObtainPairView即可,示例路由配置:

# auth/urls.py
from django.urls import path
from .views import TokenObtainPairView

urlpatterns = [
    path('login/', TokenObtainPairView.as_view(), name='user_login'),
]

修改完成后调用登录接口,就会按照你预期的格式返回access、refresh以及包含指定字段的user对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:39:04