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

如何在drf-social-oauth2登录响应中返回User模型数据

drf-social-oauth2 登录接口追加用户字段方法

默认/auth/convert-token接口来自依赖库django-oauth-toolkit,原生仅返回令牌相关字段,要追加用户模型字段,直接自定义视图覆盖默认响应逻辑即可,操作步骤如下:

  • 编写自定义ConvertToken视图
    在业务app的views.py中新增以下代码,继承原生TokenView,登录成功后把用户信息插入响应体:
import json
from django.contrib.auth import get_user_model
from oauth2_provider.models import AccessToken
from oauth2_provider.views.base import TokenView

User = get_user_model()

class CustomConvertTokenView(TokenView):
    def post(self, request, *args, **kwargs):
        response = super().post(request, *args, **kwargs)
        if response.status_code == 200:
            token_data = json.loads(response.content)
            # 用返回的access_token查关联用户,select_related减少数据库查询
            access_token = AccessToken.objects.select_related("user").get(token=token_data["access_token"])
            user = access_token.user
            # 按需配置要返回的用户字段,不要返回密码、权限标记等敏感信息
            token_data["user"] = {
                "id": user.id,
                "username": user.username,
                "email": user.email,
                # 自定义用户字段直接加就行,比如昵称、头像
                # "nickname": user.nickname,
                # "avatar": user.avatar.url if user.avatar else ""
            }
            response.content = json.dumps(token_data)
        return response
  • 覆盖默认路由
    打开项目根urls.py,把自定义视图的路由放在drf-social-oauth2路由的前面,替换原生convert-token接口:
from django.urls import path, include
from .views import CustomConvertTokenView

urlpatterns = [
    # 自定义路由必须放最前面,不然会被默认路由拦截
    path("auth/convert-token", CustomConvertTokenView.as_view(), name="convert-token"),
    path("auth/", include("drf_social_oauth2.urls", namespace="drf")),
    # 其他原有路由不动
]

替代方案

不想改oauth2核心逻辑的话,也可以单独写个/auth/me接口,校验请求头里的Bearer令牌,返回当前登录用户信息。前端拿到access_token之后,多打一次请求拉用户数据就行,缺点是多一次HTTP请求。

踩坑提醒

  • 别返回敏感字段,密码哈希、is_superuser、支付相关的用户隐私字段一律不要放在响应里
  • 路由顺序不能乱,Django按从上到下的顺序匹配,自定义路由放后面的话改了也不生效
  • 关联表的数据比如用户扩展profile表的内容,也可以正常查出来序列化返回,和普通接口写法没区别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:30:53