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

jsonwebtoken.sign() 使用对象字面量时 expiresIn 配置不生效问题

问题根因

  • jsonwebtoken 库对 JWT 标准中的时间声明(iat、exp 等)默认使用秒级 Unix 时间戳处理,expiresIn 配置的单位也为秒。
  • 当你手动传入 iat 字段时,库不会自动校验时间单位,会直接用你传入的 iat 值加上 expiresIn 的数值计算 exp。
  • 你代码中 iat 赋值为 Date.now(),该接口返回的是毫秒级时间戳,最终计算出的 exp 与 iat 的差值仅为 43200 毫秒(即 43.2 秒),和你观测到的“差值仅几秒到几分钟”的现象完全匹配。

解决方案

两种方案二选一即可:

  1. 直接删除代码中手动传入的 iat 字段,jsonwebtoken 会自动生成符合标准的秒级 iat,并正确按照你配置的 12 小时计算有效期。
  2. 如果你有自定义 iat 的需求,将传入值改为秒级即可:
iat: Math.floor(Date.now() / 1000)

额外注意

你使用 Dayjs 做时间展示时,需要注意将解析 JWT 拿到的秒级时间戳乘以 1000 转为毫秒后再传入 Dayjs 构造函数,避免出现时间展示错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:15:02