2014-12-07 50 views
6

由於從Express 4的你不應該做的如何將配置的護照對象傳遞到Express4中的路由模塊?

require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport 

module.exports = function(app, passport) { 
    // ===================================== 
    // FACEBOOK ROUTES ===================== 
    // ===================================== 
    // route for facebook authentication and login 

    app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' })); 

    // handle the callback after facebook has authenticated the user 
    app.get('/auth/facebook/callback', 
     passport.authenticate('facebook', { 
      successRedirect : '/profile', 
      failureRedirect : '/' 
     })); 

    // route for logging out 
    app.get('/logout', function(req, res) { 
     req.logout(); 
     res.redirect('/'); 
    }); 
}; 

相反,你應該使用express.Route()功能和

var routes = require('./app/routes.js'); 
app.use('/', routes); 

如何配置的護照進入的路線模塊Express 4?

回答

7

function導出仍可用於通過模塊之間的參考passport。它只會創建和return a Router而不是直接修改app。然後use

var express = require('express'); 

module.exports = function(passport) { 
    var router = express.Router(); 

    router.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' })); 

    // etc. 

    return router; 
}; 

而且,app可以:

var routes = require('./app/routes.js')(passport); 
app.use('/', routes); 
+0

偉大的答案!非常感謝! – bolerovt 2014-12-07 14:56:41

+0

但是當我嘗試上面的實現時,我剛剛遇到了一個新問題:無法GET/auth/facebook/callback?code = **************並且沒有錯誤信息。我該如何處理這個問題? – bolerovt 2014-12-07 15:17:36

+0

@bolerovt我從我的帖子中刪除了一些路由,以保持它的簡短,替換爲「//等」。您是否複製了該行,或者您是否擁有帶''/ auth/facebook/callback''的'router'和''/註銷'路線? – 2014-12-08 15:35:06