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

Python Flask API返回JWT Token时JSON序列化错误求助

解决JWT Token返回时的JSON序列化错误

嘿,我一眼就揪出问题所在了!你的错误栈最后一行明明白白写着:TypeError: Object of type bytes is not JSON serializable——这就是导致Postman报错的核心原因。

为什么会出现这个错误?

在Python 3环境下,jwt.encode()默认返回的是字节对象(bytes)(就是你控制台打印出来带b'...'前缀的那种)。控制台打印时Python会自动帮你把字节转成可读的字符串形式,但jsonify可没这么智能,它只能处理JSON原生支持的类型(字符串、数字、列表、字典等),字节对象不在这个范围内,直接返回自然就触发序列化错误了。

快速修复方案

只需要把字节对象解码成UTF-8格式的字符串,修改返回语句即可:

return jsonify(token = encoded_jwt.decode('utf-8'))

必须提的安全警告!

另外一定要注意:绝对不要把密码放进JWT的Payload里! JWT的Payload部分只是Base64编码,并非加密处理,任何人都能轻松解码看到里面的内容。把密码存进去等于把敏感信息裸奔展示,建议只放用户名、用户ID这类非敏感的身份标识。

优化后的完整代码

class Login(Resource):
    def post(self):
        json_data = request.get_json(force=True)
        un = json_data['username']
        pw = json_data['password']
        
        # 移除Payload中的密码,仅保留必要的非敏感身份信息
        encoded_jwt = jwt.encode({'username': un}, 'OH HI MARK', algorithm='HS256')
        print(encoded_jwt)
        
        # 将字节对象解码为字符串后返回
        return jsonify(token=encoded_jwt.decode('utf-8'))

这样修改后,Postman就能正常接收字符串类型的JWT Token,不会再出现错误页面啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:35:00