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

问题:jsonwebtoken生成的JWT Token始终未失效,求排查

问题原因及解决方案

你的JWT Token永久有效是因为手动设置的iat值格式错误:

  • 在genJWT函数中,你用Date.now()作为iat的值,这个方法返回的是毫秒级时间戳
  • 但jsonwebtoken库默认使用秒级时间戳处理iat和exp字段,导致生成的exp(过期时间)被错误设置为毫秒级数值,相当于把过期时间延后了1000倍(1分钟变成了16.6小时),所以看起来Token永远不会失效

修复方案

有两种方式可以解决:

方案1:移除手动设置的iat参数

jsonwebtoken会自动生成正确的秒级iat值,无需手动指定:

import jwt from "jsonwebtoken";

export const genJWT = (username: string) => {
  const token = jwt.sign({ sub: username }, "123456qwerty", {
    expiresIn: "1min",
    algorithm: "HS256",
  });

  return token;
};

方案2:将iat转换为秒级时间戳

如果一定要手动设置iat,需要把毫秒转成秒:

import jwt from "jsonwebtoken";

export const genJWT = (username: string) => {
  const token = jwt.sign({ sub: username, iat: Math.floor(Date.now() / 1000) }, "123456qwerty", {
    expiresIn: "1min",
    algorithm: "HS256",
  });

  return token;
};

修复后,Token会在1分钟后正常失效,passport-jwt的验证逻辑会自动检查exp字段,无需额外修改中间件配置。

内容的提问来源于stack exchange,提问作者Jplus2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:45:38