2017-02-01 46 views
0

我使用從here標準的例子包括:護照Facebook登錄不堅持

app.get('/login/facebook', 
    passport.authenticate('facebook')); 

app.get('/login/facebook/return', 
    passport.authenticate('facebook', { failureRedirect: '/login' }), 
    function(req, res) {  //req.user is populated 
    res.redirect('/'); 
    }); 

app.get('/', function (req, res) { 
    res.render('index.jade', { user: req.user }); //req.user is undefined 
}); 

登錄顯得做工精細。在/login/facebook/return我可以看到req.user及其細節。但在重定向到/後,req.user變爲undefined

還有什麼我必須補充,使其工作?

+0

請確保您有'app.use(passport.initialize());'和'app.use(passport.session());'你的路由器之前。 –

+0

感謝您的提示。 *'passport.initialize()'後,我重新安排了示例代碼'express-session' *。通過在'passport.initialize()'之前移動'express-session'解決了這個問題。 –

+0

我很高興你設法解決它。我也將它作爲答案發布。 –

回答

1

根據Passportjs Documentationspassport.initialize()passport.session()(用於持續登錄)中間件應express-session之後被添加到app

從文檔:

注意,啓用會話支持完全是可選的,但建議對大多數應用。如果啓用,請務必在passport.session()之前使用express.session()以確保登錄會話按正確順序恢復。

app.configure(function() { 
    app.use(express.static('public')); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.session({ secret: 'keyboard cat' })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(app.router); 
});