【发布时间】:2020-11-14 14:30:58
【问题描述】:
原码:
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, { expiresIn: '1d' });
res.cookie('token', token, { expiresIn: '1d' });
这行得通。令牌在创建后正好一天就过期了。
变化:
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, { expiresIn: '1m' });
res.cookie('token', token, { expiresIn: '1m' });
我退出,重新启动服务器,但仍然没有任何变化!令牌仍然设置为在一天后过期。我正在学习一门课程,当课程讲师在他的代码中进行此更改时,它按预期工作。令牌在一分钟后过期。
我什至尝试过:
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, { expiresIn: '10' });
res.cookie('token', token, { expiresIn: '10' });
预计令牌将在十秒或十毫秒内到期(我不确定默认单位是什么),但结果仍然相同。令牌仍设置为在一天后过期。
这是缓存吗?我对缓存、它是什么以及它是如何工作的知识几乎为零,但我很难想象对此的解释是在 NodeJS 编码本身的常规范围内。如果是这样,那将非常简单。 jwt 模块或我的应用程序如何处理整个应用程序中的 cookie 或令牌没有其他“配置”。
我包含 next.js 标记是因为我在 next.js 应用程序中使用它(虽然我怀疑这是否相关,但我当然可能是错的)。
【问题讨论】:
-
我在这段代码中找不到任何错误,你可以用你的方法编辑它
-
您是否尝试过检查应用程序中的 cookie?有单个 cookie 还是多个 cookie? cookie 中的令牌是什么?令牌看起来如何?当您在 jwt.io 上手动解包时,它显示的到期日期是什么?
-
@BINFASK 代码中没有任何错误。这就是为什么我很困惑。我把token的过期时间改成一分钟还是10分钟,怎么还有一天?
-
@WiktorZychla 我查看了 cookie,有一个名为 token 的 cookie(正如预期的那样),这个令牌的到期日期正好是我登录后的一天。这是意料之中的使用
expiresIn: '1d'代码,但即使我将其更改为'1m'或'10',它仍会保留一天。我没有使用 jwt.io“手动解包”。我以前从来没有这样做过。令牌只是一串很长的数字和字符。 -
你能把cookie部分的expiresIn属性改成maxAge吗
标签: node.js jwt next.js express-jwt