req.isAuthenticated() 改变重定向?
req.isAuthenticated() changes on redirect?
- 用户提交登录POST数据。 passport.js 验证。
req.isAuthenticated()
是 true
.
- 将用户从登录路径重定向到主页
- 在主页路线中,
req.isAuthenticated()
现在是 false
。
- 重新加载主页(浏览器 GET)。现在主页
req.isAuthenticated()
读取 true
并在后续请求中保持 true
直到注销。
我会说,这种情况大约有 80% 的时间会发生。其他 20%,hompage req.isAuthenticated()
在重定向和后续重新加载时 true
。
我找到了一个 ,但我认为答案似乎并不像评论所指出的那样正确,因为在我的设置中,后续请求在注销之前得到了正确的身份验证。
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
}
})
);
如何解决这个问题?
问题似乎是由错误引起的。参见:
- https://github.com/jaredhanson/passport/issues/401
- https://github.com/jaredhanson/passport/issues/306
解决方法是在重定向之前保存会话。
req.session.save(() =>
{
return res.redirect('/');
});
- 用户提交登录POST数据。 passport.js 验证。
req.isAuthenticated()
是true
. - 将用户从登录路径重定向到主页
- 在主页路线中,
req.isAuthenticated()
现在是false
。 - 重新加载主页(浏览器 GET)。现在主页
req.isAuthenticated()
读取true
并在后续请求中保持true
直到注销。
- 在主页路线中,
我会说,这种情况大约有 80% 的时间会发生。其他 20%,hompage req.isAuthenticated()
在重定向和后续重新加载时 true
。
我找到了一个
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
}
})
);
如何解决这个问题?
问题似乎是由错误引起的。参见:
- https://github.com/jaredhanson/passport/issues/401
- https://github.com/jaredhanson/passport/issues/306
解决方法是在重定向之前保存会话。
req.session.save(() =>
{
return res.redirect('/');
});