gpt4 book ai didi

node.js - JWT 签名 token 过期即使在代码中更改后浏览器应用程序中也不会更改

转载 作者:行者123 更新时间:2023-12-05 03:51:13 32 4
gpt4 key购买 nike

原代码:

const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, { expiresIn: '1d' });

res.cookie('token', token, { expiresIn: '1d' });

这成功了。 token 在创建后整整一天后过期。

变化:

const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, { expiresIn: '1m' });

res.cookie('token', token, { expiresIn: '1m' });

我注销了,重启了服务器,还是没有任何变化! token 仍将自己设置为一天后过期。我正在学习一门类(class),当类(class)讲师在他的代码中进行此更改时,它按预期工作。 token 在一分钟后过期。

我什至试过:

const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, { expiresIn: '10' });

res.cookie('token', token, { expiresIn: '10' });

期望 token 在十秒或十毫秒后过期(我不确定默认单位是什么)但结果仍然相同。 token 仍设置为一天后过期。

这是缓存的东西吗?我对缓存的了解几乎为零,它是什么,它是如何工作的,但我很难想象对此的解释是在 NodeJS 编码本身的常规范围内。如果是的话,那将是非常简单的。 jwt 模块或我的应用程序在整个应用程序中处理 cookie 或 token 的方式没有其他“配置”。

我包含了 next.js 标签,因为我在 next.js 应用程序中使用它(虽然我怀疑它是否相关,当然我可能是错的)。

最佳答案

我想通了。不要责怪任何对潜在解决方案发表评论的人,因为缺少我没有意识到的信息。

这是一个 NextJS 应用程序,前端有单独的逻辑来设置这个 cookie 的过期日期。此到期日期设置为一天,我没有更改它(我忘记它存在)。一旦我更改它,更改就会反射(reflect)在浏览器中。

我想您可以为已签名的 jwt 设置一个与前端的 cookie 过期日期不同的过期日期。这是多余的,也是不可取的。我将不得不寻找一个不同的长期解决方案。我认为这对现实世界的应用程序没有好处,因为它很难理解正在发生的事情。

今天早上早些时候,在我弄清楚这一点之前,10 毫秒的 jwt 过期终于开始起作用了,但仅限于后端。我收到一个后端错误,说我的 jwt session 已过期,这是意料之中的。在我的前端页面上向后端发出的请求失败,因为它没有经过身份验证,所以我得到了预期的行为,但不是我期望的那样。

编辑:我相信我已经找到了困惑的症结所在。下面的代码是旨在在响应中设置 cookie 的后端代码,但是因为我们使用单独的逻辑在前端设置 cookie,所以我相信这段代码实际上没有做任何事情。我查看了前端代码接收签名的 jwt token ,但没有引用 res.cookie 的地方。我相信这一定只是教师认为必要的额外代码行。我今天没时间了,但我会尝试在没有这行代码的情况下运行该应用程序,看看我是否能获得相同的功能。

res.cookie('token', token, { expiresIn: '1d' });

关于这个:

I guess you can set an expiration date for the signed jwt that isseparate from the cookie expiration date on the front end. It'sredundant and not desirable. I'll have to look for a differentlong-term solution. I wouldn't find this to be good for real worldapplications as it makes it difficult to understand what is happening.

我开始明白,这是一个额外的安全层,值得拥有。问题不在于后端的 jwt 逻辑。这里的问题很简单,我有额外的逻辑在浏览器中的两个不同位置设置 cookie,并调整了应用程序和浏览器未使用的逻辑。

关于node.js - JWT 签名 token 过期即使在代码中更改后浏览器应用程序中也不会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63078402/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com