如何从Django Rest Framework JWT令牌获取用户名
我使用的是Django Rest框架,其中包含了一个名为的第三方包。当您向某个路由发送用户名/密码时,它将返回一个令牌。然后需要令牌才能获得某些路由的权限。但是,如何从令牌中获取用户名?我浏览了所有的软件包文档,并浏览了StackOverflow。这是一个JSON Web令牌,我假设有一个类似于如何从Django Rest Framework JWT令牌获取用户名,django,django-rest-framework,jwt,Django,Django Rest Framework,Jwt,我使用的是Django Rest框架,其中包含了一个名为的第三方包。当您向某个路由发送用户名/密码时,它将返回一个令牌。然后需要令牌才能获得某些路由的权限。但是,如何从令牌中获取用户名?我浏览了所有的软件包文档,并浏览了StackOverflow。这是一个JSON Web令牌,我假设有一个类似于username=decode\u令牌(令牌)的方法,但我还没有找到这样的方法 基本上你可以做到这一点 username = request.user.username 对于使用Django(2.0.1
username=decode\u令牌(令牌)
的方法,但我还没有找到这样的方法 基本上你可以做到这一点
username = request.user.username
对于使用Django(2.0.1)、djangorestframework(3.7.7)、djangorestframework jwt(1.11.0)的我来说
我必须执行以下操作才能从令牌中重新使用用户:
token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
print(token)
data = {'token': token}
try:
valid_data = VerifyJSONWebTokenSerializer().validate(data)
user = valid_data['user']
request.user = user
except ValidationError as v:
print("validation error", v)
或者您可以编写一个中间件,根据用户的令牌设置用户 对我来说,这已经不再维持了。
因此,我使用了rest\u框架\u simplejw
包
from rest_framework_simplejwt.backends import TokenBackend
token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
data = {'token': token}
try:
valid_data = TokenBackend(algorithm='HS256').decode(token,verify=False)
user = valid_data['user']
request.user = user
except ValidationError as v:
print("validation error", v)
您在请求中有用户对象。或者你不是在视图中做这件事?我是在视图中做这件事的,但我是Django的新手,所以我不完全理解它是如何工作的。你能详细说明一下吗?添加你的视图代码@你为什么要编辑我的代码。我使用的是驼峰式编码。真的有必要用ux?编码吗?。“没有必要,”普拉哈尔特维迪读了pep8指南。这是python社区的惯例是的,我同意这一点。但真的有必要吗?还有比这更好的事情要做。@PrakharTrivedi您正在回答python初学者的问题。有必要编写符合python指南的答案,因为他会复制和粘贴您的代码,他会认为这种编码风格是可以的,这不适合我们的社区。@Addict这可以在任何地方使用,在传递
请求
对象的地方,但通常这是在视图中完成的。我会出错。请您共享您的整个中间件文件。对不起,这不是用户要求的。但是你可以访问链接,它有整个中间件。