Django Rest Framework:通过令牌登录获取用户详细信息和权限

时间:2020-10-07 11:07:06

标签: django django-rest-framework

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

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

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

  • 写我自己的令牌生成视图?
  • 子类化现有视图并用获取用户信息的视图覆盖串行器?
  • 使用其他方法来转移权限或登录吗?

Django中发生的“魔术”级别使我无法设置和覆盖哪些参数和值使我感到困惑。

1 个答案:

答案 0 :(得分:1)

是的,您需要继承 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

相关问题