Python解码JWT生成令牌时报错AttributeError: 'str'对象无decode属性
问题产生原因
这个错误是PyJWT库的版本差异导致的:
- PyJWT 1.x版本中,
jwt.encode()方法返回的是bytes类型对象,因此可以调用decode('UTF-8')方法将其转为字符串。 - PyJWT 2.0及以上版本中,
jwt.encode()方法默认直接返回str类型对象,字符串本身没有decode方法,调用时就会触发该属性错误。
解决方案
根据你的实际需求选择对应修正方案:
- 如果你只是需要得到字符串格式的JWT令牌,直接删除多余的decode操作即可,修正后代码如下:
token = jwt.encode({'public_id': user.public_id, 'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)}, app.config['SECRET_KEY']) # 直接使用encode返回的结果即可,无需decode decodetoken = token
- 如果你是需要解析JWT令牌里存储的payload内容,应该使用PyJWT提供的
jwt.decode()方法完成解码,不要对encode的返回值做处理,示例代码如下:
# 生成JWT令牌 token = jwt.encode({'public_id': user.public_id, 'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)}, app.config['SECRET_KEY']) # 解码JWT获取payload decoded_payload = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
注意解码时需要指定签名对应的算法,否则可能触发额外的警告或报错。
内容的提问来源于stack exchange,提问作者Badruzzaman
相关产品推荐
相关产品推荐

