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

