Django Rest框架:通过令牌登录获取用户详细信息和权限
My(Angular)frontend通过提供的Django Rest框架:通过令牌登录获取用户详细信息和权限,django,django-rest-framework,Django,Django Rest Framework,My(Angular)frontend通过提供的jwt_视图执行jwt登录到Django Rest框架后端。TokenActainPairView类 但是,这只返回访问和刷新令牌,实际上我希望获得更多,例如用户名和用户拥有的权限(这样前端可以隐藏或禁用用户无论如何都不能使用的任何功能) 实现这一目标的最佳解决方案是什么 写我自己的令牌生成视图 子类化现有视图并用获取用户信息的序列化程序覆盖序列化程序 是否使用其他方法传输权限或登录 Django中发生的“魔力”让我很困惑,我可以设置和覆盖哪些
jwt_视图执行jwt登录到Django Rest框架后端。TokenActainPairView
类
但是,这只返回访问和刷新令牌,实际上我希望获得更多,例如用户名和用户拥有的权限(这样前端可以隐藏或禁用用户无论如何都不能使用的任何功能)
实现这一目标的最佳解决方案是什么
- 写我自己的令牌生成视图
- 子类化现有视图并用获取用户信息的序列化程序覆盖序列化程序
- 是否使用其他方法传输权限或登录
Django中发生的“魔力”让我很困惑,我可以设置和覆盖哪些参数和值。是的,您需要将
TokenActainPairView
以及TokenActainPairSerializer
子类化
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
从rest\u framework\u simplejwt.serializer导入TokenActainPairSerializer
从rest\u framework\u simplejwt.views导入TokenObtainPairView
类MyTokenOcctainPairSerializer(TokenOcctainPairSerializer):
def验证(自身、属性):
attrs=super().validate(attrs)
返回{
“用户名”:self.user.username,
“电子邮件”:self.user.email,
“权限”:self.user.user\u permissions.values\u list(“代码名”,flat=True),
“组”:self.user.groups.values_列表(“name”,flat=True),
**属性,
}
类MyTokenActainPairView(TokenActainPairView):
serializer_class=MyTokenActainPairSerializer
您可以通过调用self.user访问序列化程序中经过身份验证的用户,因此您可以通过self.user.user\u permissions.all()访问他们的权限
另外,不要忘记将新的视图类连接到
url.py
您使用的是什么包?rest\u framework\u simplejwt
这很好。也许是一个后续问题,因为我似乎找不到关于它的最佳实践信息。您通常会让前端检查权限/组信息以决定显示哪些功能吗?我会选择这种方式。