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

时间:2014-10-20 11:16:55

标签: javascript node.js express session-cookies passport.js

我在节点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或会话有关。请帮助

2 个答案:

答案 0 :(得分:1)

在Express中创建cookie中间件时,需要设置会话超时:

app.use(express.session({
   secret : 'your_cookie_secret',
   cookie:{
     maxAge : 360000 // one hour in millis
   }
})

答案 1 :(得分:0)

抱歉

实际上我在azure上发布了我的网站。由于azure站点在空闲超时20分钟后重新启动,因此身份验证失败