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

如何在Django Rest Framework的simplejwt令牌中添加登录POST自定义claim?

实现方法

要把登录请求里的额外参数(比如project)加入access token的claims,你需要自定义TokenObtainPairSerializer,通过重写方法获取请求参数并添加到token中,具体步骤如下:

  • 自定义序列化器
    在你的Django应用中创建序列化器文件(如serializers.py),继承TokenObtainPairSerializer后重写相关方法:

    from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
    
    class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
        def validate(self, attrs):
            # 先调用父类逻辑完成用户身份验证
            data = super().validate(attrs)
            
            # 从请求体中获取传入的project参数
            project = self.context['request'].data.get('project')
            if project:
                # 获取access token并添加自定义claim
                refresh_token = self.get_token(self.user)
                refresh_token.access_token['project'] = project
                
                # 更新返回的token数据
                data['access'] = str(refresh_token.access_token)
                data['refresh'] = str(refresh_token)
            
            return data
    
        @classmethod
        def get_token(cls, user):
            token = super().get_token(user)
            # 这里可保留你之前已添加的其他自定义claims
            return token
    
  • 替换默认视图
    在urls.py中替换默认的TokenObtainPairView,使用你自定义的序列化器:

    from rest_framework_simplejwt.views import TokenObtainPairView
    from .serializers import CustomTokenObtainPairSerializer
    
    class CustomTokenObtainPairView(TokenObtainPairView):
        serializer_class = CustomTokenObtainPairSerializer
    
    urlpatterns = [
        # 替换原/api/token/路由
        path('api/token/', CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
        # 其他路由配置...
    ]
    
  • 验证效果
    用你提供的curl请求测试:

    curl -X POST -H 'Content-type: application/json' -d '{"username": "user1", "password": "supersecretpassword", "project": "project1"}' https://myurl.com/api/token/
    

    解析返回的access token,就能看到project字段已被包含在claims中。

如果需要对project参数做合法性校验(比如检查是否与当前用户关联),可以在validate方法中添加对应的校验逻辑,避免非法参数写入token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:39:54