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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:23