如何解码令牌并获取djangorestframework jwt packagefor Django的信息

如何解码令牌并获取djangorestframework jwt packagefor Django的信息,django,python-2.7,django-rest-framework,jwt,Django,Python 2.7,Django Rest Framework,Jwt,我已经开始使用djangorestframework jwt包而不是PyJWT,我只是不知道如何解码传入的令牌(我知道有验证令牌方法)。。。。我所需要知道的就是如何解码令牌并获取编码信息……回答可能太晚了,但我们可以解码jwt并获取有效负载 使用jwt。从jwt模块解码 假设您得到的jwt令牌看起来像,并且您的加密负载位于令牌的中间 { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib

我已经开始使用djangorestframework jwt包而不是PyJWT,我只是不知道如何解码传入的令牌(我知道有验证令牌方法)。。。。我所需要知道的就是如何解码令牌并获取编码信息……

回答可能太晚了,但我们可以解码jwt并获取有效负载 使用jwt。从jwt模块解码

假设您得到的jwt令牌看起来像,并且您的加密负载位于令牌的中间

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE1MzIxMzg3ODQsImV4cCI6MTUzMjEzOTA4NCwidXNlcl9pZCI6MSwiZW1haWwiOiJwcmF0aWsucHVjc2RAZ21haWwuY29tIiwibXlmIjoxfQ.enG5qiSOPh98YYZBpScHSL5TM8RBz6JhU6uF0l1bZXM"
}
以下是解决方案的代码段:

import jwt
#jwt.decode(<encoded token>,<secret key>,<algorthm>)
decodedPayload = jwt.decode('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE1MzIxMzg3ODQsImV4cCI6MTUzMjEzOTA4NCwidXNlcl9pZCI6MSwiZW1haWwiOiJwcmF0aWsucHVjc2RAZ21haWwuY29tIiwibXlmIjoxfQ.enG5qiSOPh98YYZBpScHSL5TM8RBz6JhU6uF0l1bZXM',None,None)
导入jwt
#jwt.解码(,)
decodedPayload=jwt.decode('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.EYJ1C2VYBMFTZSi6IMFKBLUIWIB3JPZ19PYXQIOJEIWIIWIJJJJJJ3MZZZZZZ3ODQSIMV4CCI6MTUZZJEZTA4NCWIDXNLCL9PZCI6SWIZWIJWCM0AWSUCHVC2RAZ2RAZ21HAWWWUY29TIIWIBMIWIJJJJJJJJJJ0Q.ENG.ENG5K5Q5QIOPHZZ98YYZZZZZZZZZZZZ

Pratik提供的答案确实有效,因此我将添加本机djangorestframework jwt替代方案,它使用相同的jwt库进行解码:

from rest_framework_jwt.utils import jwt_decode_handler

decoded_payload = jwt_decode_handler('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE1MzIxMzg3ODQsImV4cCI6MTUzMjEzOTA4NCwidXNlcl9pZCI6MSwiZW1haWwiOiJwcmF0aWsucHVjc2RAZ21haWwuY29tIiwibXlmIjoxfQ.enG5qiSOPh98YYZBpScHSL5TM8RBz6JhU6uF0l1bZXM')

我使用此方法解码令牌并验证用户。首先我使用了不带
的算法=['HS256']
然后它给出了jwt.exceptions.DecodeError。最后,我添加了它。folling方法对我很有效

class VerifyEmail(generics.GenericAPIView):
def get(self, request):
    token = request.GET.get('token')
    print('payload ' + str(settings.SECRET_KEY))
    try:
        payload = jwt.decode(jwt=token, key=settings.SECRET_KEY, algorithms=['HS256'])
        print('payload 1 ' + str(payload))
        user = User.objects.get(id=payload['user_id'])
        if not user.is_active:
            user.is_active = True
            user.save()
        return Response({'email': 'Successfully activated'}, status=status.HTTP_200_OK)
    except jwt.ExpiredSignatureError as e:
        return Response({'error': 'Activations link expired'}, status=status.HTTP_400_BAD_REQUEST)
    except jwt.exceptions.DecodeError as e:
        return Response({'error': 'Invalid Token'}, status=status.HTTP_400_BAD_REQUEST)

为什么你需要解码它?我有一个自定义的用户模型,我添加了“userType”来识别用户的类型,比如订阅者、编辑或作者之类的。。。。因此,当基于用户类型向端点发出api请求时,响应会有所不同。。。所以我在令牌上对userType进行了编码,当通过解码发出请求时,我将能够识别出用户的类型……多亏了point@MadhuraPrasanna,你能解释一下你是如何对令牌进行编码的吗?@Lobbel我用它来制作访问令牌和刷新令牌
access\u token=AccessToken.for\u user(user)刷新令牌=刷新令牌。对于用户(用户)
@Madhura Prasanna,感谢您的回复。但是我会使用刷新令牌进行验证,这不是没有必要的吗?我可以使用django=>default\u-token\u生成器中的内置函数。