req.isAuthenticated()
是true
。req.isAuthenticated()
现在为false
。req.isAuthenticated()
读取true
,并在后续请求中保持true
直到注销。我会说,这种情况约占80%。重定向和后续重新加载时,其他20%的漫游req.isAuthenticated()
为true
。
我找到了similar question,但是我认为答案似乎不正确,正如评论所指出的那样,并且由于我的设置,随后的请求都经过了正确的身份验证,直到注销为止。
router.post('/sign_in', (req, res) =>
{
passport.authenticate
(
'local',
(err, user, info) =>
{
if(!err && user)
{
req.logIn(user, (err) =>
{
if(!err)
{
console.log('s', req.isAuthenticated()); // <-- true
res.setHeader('Cache-Control', 'no-cache');
return res.redirect('/');
}
});
}
}
)(req, res);
}
然后:
router.get('/', async (req, res) =>
{
console.log('h', req.isAuthenticated()); // <-- false ???
res.send();
}
如果有关系,我的会话设置如下:
app.use
(
session
({
store : //...
secret : process.env.SESSION_SECRET,
resave : false,
saveUninitialized : true,
cookie :
{
httpOnly : false,
secure : false,
maxAge : null
}
})
);
如何解决?
答案 0 :(得分:1)
该问题似乎是由错误引起的。参见:
解决方法是在重定向之前保存会话。
req.session.save(() =>
{
return res.redirect('/');
});