如何从Django Rest Framework JWT token获取用户名

yx2lnoni  于 2023-07-01  发布在  Go
关注(0)|答案(4)|浏览(223)

我正在使用Django Rest框架,并且我已经包含了一个名为REST框架JWT Auth的第三方包。当您向某个路由发送用户名/密码时,它会返回一个令牌。然后需要令牌来获得对某些路由的许可。但是,如何从令牌中获取用户名?我已经看过了所有的包文档,并通过StackOverflow。它是一个JSON Web Token,我假设有一个类似username = decode_token(token)的方法,但我还没有找到这样的方法。

ki1q1bka

ki1q1bka1#

基本上你可以这样做

username = request.user.username
e4yzc0pl

e4yzc0pl2#

对我来说,这是因为RestFrameworkJWT不再维护。所以我使用了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)
7ajki6be

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)

或者您可以编写一个中间件,根据令牌设置用户。

egdjgwm8

egdjgwm84#

如果你使用的是djangorestframework_simplejwt,要从JWT Token获取用户对象,你需要做以下操作:

token = AccessToken(access_token)
user_id = token.payload['user_id']
user = User.objects.get(id=user_id)

这个很好用!!

相关问题