我正在使用Django Rest框架,并且我已经包含了一个名为REST框架JWT Auth的第三方包。当您向某个路由发送用户名/密码时,它会返回一个令牌。然后需要令牌来获得对某些路由的许可。但是,如何从令牌中获取用户名?我已经看过了所有的包文档,并通过StackOverflow。它是一个JSON Web Token,我假设有一个类似username = decode_token(token)的方法,但我还没有找到这样的方法。
username = decode_token(token)
ki1q1bka1#
基本上你可以这样做
username = request.user.username
e4yzc0pl2#
对我来说,这是因为RestFrameworkJWT不再维护。所以我使用了rest_framework_simplejwt包。
rest_framework_simplejwt
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=True) user = valid_data['user'] request.user = user except ValidationError as v: print("validation error", v)
7ajki6be3#
对于我来说,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)
或者您可以编写一个中间件,根据令牌设置用户。
egdjgwm84#
如果你使用的是djangorestframework_simplejwt,要从JWT Token获取用户对象,你需要做以下操作:
token = AccessToken(access_token) user_id = token.payload['user_id'] user = User.objects.get(id=user_id)
这个很好用!!
4条答案
按热度按时间ki1q1bka1#
基本上你可以这样做
e4yzc0pl2#
对我来说,这是因为RestFrameworkJWT不再维护。所以我使用了
rest_framework_simplejwt
包。7ajki6be3#
对于我来说,Django(2.0.1),djangorestframework(3.7.7),djangorestframework-jwt(1.11.0)。
我不得不做以下操作来从令牌中取回我的使用用户:
或者您可以编写一个中间件,根据令牌设置用户。
egdjgwm84#
如果你使用的是djangorestframework_simplejwt,要从JWT Token获取用户对象,你需要做以下操作:
这个很好用!!