我在节点js routes.js中实现了以下函数。在首先提供任何请求之前,检查isAuthenticated。
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) {
console.log('Session Expiry '+req.session.cookie.expires);
console.log('Authenticated');
return next();
}
console.log('Not Authenticated');
res.redirect('/');
}
但是当我打开页面后刷新或导航到其他页面后,它会转到索引页而不是当前页面。我发现这是因为req.isAuthenticated()在页面加载一段时间后评估为false
为什么会变错?
是否因序列化不当而导致
这是我的序列化和deserilize方法,我正确地做了,
passport.serializeUser(function (user, done) {
console.log('Serializing User');
done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser(function (id, done) {
console.log('Calling Deserlize');
dbconn.user_findById(id, function (err, user) {//call to query DB
console.log('Deserializing user from DB');
done(err, user);
});
});
是否与cookie或会话有关。请帮助
答案 0 :(得分:1)
在Express中创建cookie中间件时,需要设置会话超时:
app.use(express.session({
secret : 'your_cookie_secret',
cookie:{
maxAge : 360000 // one hour in millis
}
})
答案 1 :(得分:0)
抱歉
实际上我在azure上发布了我的网站。由于azure站点在空闲超时20分钟后重新启动,因此身份验证失败