Django simplejwt:refresh token存入字典返回解码值如何解决
问题原因
RefreshToken.for_user()返回的是RefreshToken类的实例对象,不是纯字符串:
- 直接用
print输出的时候,会自动调用实例的__str__方法,返回原始的refresh token字符串 - 当你把这个实例直接放进字典传给
JsonResponse序列化时,Django会调用实例的序列化逻辑,直接输出解码后的JWT payload内容,也就是你看到的字典格式
解决方法
只需要在把refresh token存入字典的时候,显式将其转换为字符串即可,修改代码里data字典的赋值行:
data = {'token': token, 'refresh_token': str(token_refresh)}
修改后的完整代码
@csrf_exempt #@api_view(('GET',)) def check_token(request): token_refresh = RefreshToken.for_user(request.user) print('REFRESH', token_refresh) token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1] # 显式转换为字符串即可得到原始token data = {'token': token, 'refresh_token': str(token_refresh)} try: valid_data = TokenBackend(algorithm='HS256').decode(token, verify=False) data['uui'] = valid_data['user_id'] data['validUntil'] = valid_data['exp'] data['clientId'] = 'default' print(data) return JsonResponse(data) except ValidationError as v: print("Validation error", v)
修改后序列化返回的refresh_token字段就会是你需要的原始字符串格式。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

