使用Postman调用API始终返回Token is invalid问题求助
排查JWT无效token问题
针对调用/user接口返回Token is invalid !!的问题,按以下步骤逐一排查:
1. 检查Token格式
你提供的token带有双引号,必须去掉双引号后再粘贴到Postman的x-access-token请求头中。如果保留双引号,JWT解码时会把引号当作token的一部分,直接导致验证失败。
2. 确认Token是否过期
你的token payload中的exp字段值为1658755605,转换为北京时间是2022年7月25日10:06:45,目前已过期。过期的token会被JWT库直接判定为无效,需要重新生成有效的token。
可以用以下代码验证token的过期状态(忽略过期验证查看payload):
import jwt from your_app_module import app # 替换为你的Flask应用模块 token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwdWJsaWNfaWQiOiJmY2Y2OTBmNS0wNGViLTRjYzUtOTQ0ZC01M2ZkMDU4MjMxNTkiLCJleHAiOjE2NTg3NTU2MDV9.oNc7J2oT7ux-t1I-DioA0Lwf22ArWbGxrrkNsmIOZ10" try: # 忽略过期验证,查看token内容 payload = jwt.decode(token, app.config['SECRET_KEY'], options={"verify_exp": False}) print("Token payload:", payload) except Exception as e: print("解码错误:", str(e))
3. 验证SECRET_KEY一致性
生成token时使用的SECRET_KEY必须和验证时(jwt.decode中调用的app.config['SECRET_KEY'])完全一致,包括大小写、特殊字符、空格等。检查生成token的代码,确认密钥和当前接口使用的密钥是同一个。
4. 检查JWT算法匹配
你的token头部指定算法为HS256,验证时建议显式指定算法,避免因默认算法不匹配导致失败:
修改token_required装饰器中的解码代码:
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
5. 确认用户存在性
解码token后得到的public_id为fcff690f5-04eb-4cc5-944d-53fd05823159,检查数据库中是否存在该public_id的用户。
6. 核对请求头名称
确保Postman中添加的请求头键为x-access-token,严格保持和代码中的键名一致可以避免潜在问题。
内容的提问来源于stack exchange,提问作者Rishav Singh
相关产品推荐
相关产品推荐

