**已解决**
我一直在努力解决这个问题。那里有很多类似的帖子,但没有提出的解决方案对我有用。
我正在使用带有cookie会话的Express和Passport。当我将update completed at hh:mm:ss
传递给cookieSession时,一切正常:
secret
但默认cookie是基于会话的,因此当您关闭浏览器时它会清除。我需要一个有时间限制的cookie。所以我尝试使用所谓的支持选项:
app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession('MySecret'));
app.use(passport.initialize());
app.use(passport.session());
它停止工作。看起来cookie在我的浏览器中设置并且看起来不错,但没有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());
,后续请求未经过身份验证。
我尝试使用req.user
代替maxage
无效。我可以切换到相同的配置,但是使用maxAge
而不是express.session()
并且 可以正常工作,但是当服务器重新启动时会话会丢失。
任何帮助?
编辑:我正在使用Express 3.20.2 btw
答案 0 :(得分:1)
这是用户错误。我不知道我在哪里获得了将#map-canvas {
width: 100%;
height: 280px;
background-color: #CCC
}
.image-formatting {
max-width: 100%;
height: auto;
opacity: 0.5;
z-index: -1;
position: absolute;
margin-left: 65%;
}
作为字符串传递给secret
的语法,但这是无效的。它会被忽略,实际上会回到使用由cookieSession()
调用首先定义的req.secret
。
这就是它使用原始代码的原因。我仍然认为这是一个wtf时刻,因为第二种语法应该仍然有效,但事实并非如此。它归结为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;
}
}
}
的选项中传递secret
时,它会落入cookieSession
块,并最终设置不同的Cookie?我不知道,但它似乎是一个错误。如果我对else
和cookieParser
使用相同的秘密,那应该是好的。但无论如何......
======
tl; dr需要这样:
cookieSession