我的(Angular)前端通过提供的jwt_views.TokenObtainPairView
类,执行jwt登录到Django Rest Framework后端。
但是,这仅返回访问和刷新令牌,而我实际上想获取更多信息,例如用户名和用户所拥有的权限(这样前端可以隐藏或禁用用户无论如何都无法使用的任何功能)。
实现此目标的最佳解决方案是什么?
Django中发生的“魔术”级别使我无法设置和覆盖哪些参数和值使我感到困惑。
答案 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