req.isAuthenticated()在服务器启动一段时间后返回false
问题描述:
我已经在节点js routes.js.中实现了以下功能。在首先提供任何请求之前,会检查isAuthenticated。req.isAuthenticated()在服务器启动一段时间后返回false
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('/');
}
但是,当我刷新或打开页面后转到其他页面一段时间后,它进入索引页,而不是当前page.I发现,这是因为req.isAuthenticated()后,一些计算结果为假加载页面的时间。
它为什么会变成错误?
是因为不正确的序列化
这是我的序列化和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或会话。好心帮
答
对不起
其实我发表我的网站在azure.Because那蔚蓝的站点重新启动的事实在20分钟的空闲超时后,认证失败
答
当您在快递创建的cookie中间件您需要设置会话超时:
app.use(express.session({
secret : 'your_cookie_secret',
cookie:{
maxAge : 360000 // one hour in millis
}
})
感谢您的回复Jivings,但我已经包括会话中间件app.use(express.session({secret:'mysecret',cookie:{maxAge: 12 * 3600 * 1000}}));作为12小时 – keerthee 2014-10-20 11:37:06
这是我的序列化和deserilize方法,我正确做,passport.serializeUser(函数(用户,完成)console.log('序列化用户'); done(null,user.id); }); //用于反序列化用户 passport.deserializeUser(功能(ID,完成){ 的console.log( '调用Deserlize'); dbconn.user_findById(ID,功能(ERR,用户){//调用查询DB console.log('从DB反序列化用户'); done(err,user); }); }); – keerthee 2014-10-20 11:40:14