req.isAuthenticated()在服务器启动一段时间后返回false

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 
    } 
}) 
+0

感谢您的回复Jivings,但我已经包括会话中间件app.use(express.session({secret:'mysecret',cookie:{maxAge: 12 * 3600 * 1000}}));作为12小时 – keerthee 2014-10-20 11:37:06

+0

这是我的序列化和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