首页 > 解决方案 > Django Rest Framework:使用令牌登录获取用户详细信息和权限

问题描述

jwt_views.TokenObtainPairView我的(Angular)前端通过提供的类执行 jwt 登录到 Django Rest Framework 后端。

但是,这仅返回访问和刷新令牌,我实际上希望获得更多,例如用户名和用户拥有的权限(以便前端可以隐藏或禁用用户无论如何都无法使用的任何功能)。

实现这一目标的最佳解决方案是什么?

Django 中发生的“魔法”程度让我对我可以设置和覆盖哪些参数和值感到困惑。

标签: djangodjango-rest-framework

解决方案


是的,您需要子类TokenObtainPairView以及TokenObtainPairSerializer.

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView


class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        attrs = super().validate(attrs)
        return {
            "username": self.user.username,
            "email": self.user.email,
            "permissions": self.user.user_permissions.values_list("codename", flat=True),
            "groups": self.user.groups.values_list("name", flat=True),
            **attrs,
        }


class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer

您可以通过调用访问序列化程序中经过身份验证的用户,self.user因此您可以通过以下方式访问他们的权限self.user.user_permissions.all()

另外,不要忘记将新视图类连接到urls.py


推荐阅读