gpt4 book ai didi

node.js - 无法让 `cookieSession` 与 `maxAge` 一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:23 32 4
gpt4 key购买 nike

** 已解决 **

我已经为这个问题苦苦挣扎了一段时间。那里有很多类似的帖子,但所提出的解决方案都不适合我。

我正在使用带有 cookie session 的 Express 和 Passport。当我仅将 secret 传递给 cookieSession 时,一切正常:

app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession('MySecret'));
app.use(passport.initialize());
app.use(passport.session());

但默认 cookie 是基于 session 的,因此当您关闭浏览器时它会被清除。我需要一 block 限时 cookies 。所以我尝试使用据称支持的选项:

app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession({
secret: 'MySecret',
cookie: {
maxAge: 365 * 24 * 60 * 60 * 1000
}
}));
app.use(passport.initialize());
app.use(passport.session());

它停止工作了。看起来 cookie 在我的浏览器中设置并且看起来不错,但是没有 req.user,并且后续请求未经过身份验证。

我尝试使用 maxage 而不是 maxAge 但无济于事。我可以切换到相同的配置,但使用 express.session() 而不是 express.cookieSession() 并且它确实工作,但是当服务器重新启动时 session 会丢失。

有什么帮助吗?

编辑:顺便说一句,我使用的是 Express 3.20.2

最佳答案

这是用户错误。我不确定从哪里获得将 secret 作为字符串传递给 cookieSession() 的语法,但这是无效的。它被忽略,实际上回退到使用 req.secret ,它是由 cookieParser('MySecret') 调用首先定义的。

这就是它使用原始代码的原因。我仍然认为这是一个糟糕的时刻,因为第二种语法应该仍然有效,但事实并非如此。它归结为 cookieSession 模块中的这段代码:

if (!options.secret && req.secret) {
req.session = req.signedCookies[key] || {};
req.session.cookie = cookie;
} else {
// TODO: refactor
var rawCookie = req.cookies[key];
if (rawCookie) {
var unsigned = cookieParser.signedCookie(rawCookie, secret);
if (unsigned) {
var original = unsigned;
req.session = cookieParser.JSONCookie(unsigned) || {};
req.session.cookie = cookie;
}
}
}

因此,当您在 cookieSession 的选项中传递 secret 时,它会落入 else block 中,最终设置了一个不同的cookie?我不知道,但这似乎是一个错误。如果我对 cookieParser 和 cookieSession 使用相同的 secret ,那应该很好。但无论如何...

========

tl;博士,它需要​​是这样的:

app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession({
cookie: {
maxAge: 30 * 24 * 60 * 60 * 1000
}
}));

关于node.js - 无法让 `cookieSession` 与 `maxAge` 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109331/

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