You need to enable JavaScript to run this app. Django simplejwt:refresh token存入字典返回解码值如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 15:48:02