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

