You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Object of type bytes is not JSON serializable-jwt token报错问题咨询

报错原因定位

该Object of type bytes is not JSON serializable报错核心来自两处逻辑错误:

  • jwt.decode方法参数传递错误:原代码中jwt.decode(token, app.config, ['SECRET_KEY'], algorithms = "HS256")不符合pyjwt的参数规范。decode方法的第二个参数应为签名密钥本身app.config['SECRET_KEY'],代码错误传入了整个app.config配置对象,多余传入的['SECRET_KEY']作为第三个参数会导致解密结果格式异常,出现bytes类型的返回值,后续jsonify序列化时就会触发类型错误。
  • 裸异常捕获掩盖了具体问题:代码使用了无指定类型的except,无法区分是token解码错误、签名错误还是返回值类型错误,无法定位根因。
  • 额外排查点:如果生成JWT的逻辑中payload字段传入了bytes类型的值,解码后的数据中也会保留bytes类型,序列化时同样会触发该报错。
修复步骤
  1. 修正jwt.decode的参数配置,替换原有解码逻辑
  2. 拆分异常捕获类型,方便后续问题定位
  3. 校验JWT生成逻辑,确保payload内所有字段均为字符串、数字等可JSON序列化的基础类型
修复后完整装饰器代码
from functools import wraps
import jwt
from flask import request, jsonify

def jwt_required(func):
    @wraps(func)
    def jwt_required_wrapper(*args, **kwargs):
        token = request.args.get('token')
        if not token: 
            return jsonify( { 'message' : 'Token is missing'} ), 401
        try:
            # 修正参数:传入单独的SECRET_KEY,algorithms参数传数组格式
            data = jwt.decode(token, app.config['SECRET_KEY'], algorithms = ["HS256"])
        except jwt.ExpiredSignatureError:
            return jsonify( { 'message' : 'Token has expired'} ), 401
        except jwt.InvalidTokenError:
            return jsonify( { 'message' : 'Token is invalid'} ), 401
        return func(*args, **kwargs)
    return jwt_required_wrapper
Postman请求校验

发起GET请求时确认url参数中的token是完整的JWT字符串,不要带多余的引号、空格或编码符号。


内容的提问来源于stack exchange,提问作者Diarmuid Okane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:03