2014-10-20 59 views
1

我已經在節點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或會話。好心幫

回答

0

對不起

其實我發表我的網站在azure.Because那蔚藍的站點重新啓動的事實在20分鐘的空閒超時後,認證失敗

1

當您在快遞創建的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

相關問題