python Django REST框架简单jwt添加自定义负载数据并在路由中访问它

d6kp6zgx  于 2023-03-07  发布在  Python
关注(0)|答案(1)|浏览(100)

我在登录和注册时使用RefreshToken.for_user(user)生成了一个用于身份验证的自定义jwt令牌。我可以在API端点中使用request.user访问user,但我还想在负载数据中添加用户类型,以便可以访问API端点中的user_type字段。
这就是我正在做的。

def get_tokens_for_user(user):
  refresh = RefreshToken.for_user(user)
  return {
      'refresh': str(refresh),
      'access': str(refresh.access_token),

class UserRegistrationView(APIView):
  def post(self, request, format=None):
    serializer.is_valid(raise_exception=True)
    token = get_tokens_for_user(user)
    return Response({ 'token':token })

现在在终点

class FileDetail(APIView):
    permission_classes = (IsAuthenticated,)
    def get(self, request, pk):
        user = request.user
        user_type = request.user_type // this data I want to save in the payload and get here.

因此我希望在API端点使用来自jwt负载数据user_type和其他数据

jchrr9hc

jchrr9hc1#

这就是你如何添加自定义的有效负载。

  • 导入令牌获取对序列化程序
    从rest_framework_simplejwt.序列化程序导入令牌获取对序列化程序

类自定义令牌获取对串行化程序(令牌获取对串行化程序):

def validate(self, attrs):
        data = super(CustomeTokenObtainPairSerializer, self).validate(attrs)
        if self.user.is_active is not True:
            raise serializers.ValidationError({"message": "User is not active."})
        data.update({
            'username': self.user.username,   # username
            'email': self.user.email,       # email
            'mobile_number': self.user.mobile_number  # mobile_number
                **## here add more fields as you want**
        })
        return data

相关问题