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
相关产品推荐
相关产品推荐

