django - Django Rest Framework:使用令牌登录获取用户详细信息和权限
问题描述
jwt_views.TokenObtainPairView
我的(Angular)前端通过提供的类执行 jwt 登录到 Django Rest Framework 后端。
但是,这仅返回访问和刷新令牌,我实际上希望获得更多,例如用户名和用户拥有的权限(以便前端可以隐藏或禁用用户无论如何都无法使用的任何功能)。
实现这一目标的最佳解决方案是什么?
- 编写我自己的令牌生成视图?
- 子类化现有视图并用获取用户信息的序列化程序覆盖?
- 使用不同的方法转移权限或登录?
Django 中发生的“魔法”程度让我对我可以设置和覆盖哪些参数和值感到困惑。
解决方案
是的,您需要子类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
推荐阅读
- javascript - 儿童身高上的CSS过渡div高度
- php - 显示来自 db 的图像
- swift - AVAudoPlayerNode 播放声音定义的次数
- doctrine-orm - 带有 var 的学说存储库 FindBy Array
- scala - 独立的 Kafka Spark Sinks(多个生产者和经纪人)
- jsf - 在 JSF 视图中根据另一个组件的值表达式动态更新一个组件
- r - 无法在 R 中调用 Fortran 子例程(R 崩溃)
- java - 使用 TabLayout 在 android 上锁定标签更改
- javascript - JavaScript 命名空间和来自两个地方的调用函数
- scala - 分层采样:在 Scala 中为 sampleBy 方法形成分数图