使用django rest framework jwt向JWT标记体添加信息

我使用
django rest框架和
djangorestframework-jwt包来创建JWT令牌以进行授权.

在前端,我可以解码令牌并获取用户名,电子邮件和user_id.但是,我想检索一些额外的信息.例如,如果我能获得我们的授权模型(用户模型)上的字段,那将非常方便.

我可以通过常规APIView单独请求获取用户信息.但是我想知道是否有可能在JWT体内添加一些额外的参数?

最佳答案 正如在
github issue中详述的那样,我通过从DRF-JWT子类化ObtainJSONWebToken类来完成此操作:

from rest_framework_jwt import views as jwt_views
from .serializers import UserSerializer 

class UserLoginViewJWT(jwt_views.ObtainJSONWebToken):
    user_serializer_class = UserSerializer

    def post(self, request, *args, **kwargs):
        response =  super().post(request, *args, **kwargs)

        if response.status_code == status.HTTP_200_OK:
            user = get_user_model().objects.get(email=request.data[get_user_model().USERNAME_FIELD])
            serialized_user = self.user_serializer_class(user)
            response.data.update(serialized_user.data)
        return response

注意:上面的代码可能缺少一些导入

来自@jpadilla的回复也指明了这一点

You can also do this with the JWT_RESPONSE_PAYLOAD_HANDLER setting.
07001

点赞