Node.js中JWT验证始终失败,测试代码为何一直输出fail?
问题根源
你犯了一个核心错误:你把JWT拆分后只拿签名部分去验证,但jwt.verify需要传入完整的JWT令牌,而不是单独的签名段。
JWT的结构是header.payload.signature三个部分用点分隔,验证时必须提供完整的字符串,jsonwebtoken库会自动解析并验证签名是否匹配。你现在只传了第三段,库根本无法识别这是有效的JWT,自然验证失败。
修正后的代码
var refreshToken = jwt.sign({username: "test"}, "secret"); // 直接传入完整的refreshToken,不要拆分 jwt.verify(refreshToken, "secret", (err, user) => { if (err) { console.log("fail"); } else { console.log("TEST"); } })
额外说明
如果是想单独验证签名逻辑,可以手动计算签名(用相同的算法、header、payload和密钥)再和原签名对比,但这完全没必要——jwt.verify已经帮你做了所有验证工作,包括签名有效性、令牌过期等(如果设置了exp的话)。
内容的提问来源于stack exchange,提问作者tyler
相关产品推荐
相关产品推荐

