2014-02-07 50 views
0

我正在爲Node.js使用Passport身份驗證中間件。我想從我自己的對象中使用它(而不是在路徑定義中內聯)。之所以這樣認證機制將根據應用程序設置而改變,我想保持關注點和可測試性的分離。Node.js護照中間件

從文檔中使用的一個例子:

app.post('/session/create', 
    passport.authenticate('local', { failureRedirect: '/login' }), 
    function(req, res) { 
    res.redirect('/'); 
    }); 

我想是這樣的:

app.post('/session/create', sessionController.create); 

...其中會話控制器可通過Passport身份驗證封裝的協調。

有人可以幫助我以這種方式構建我的護照使用嗎?

回答

1

這裏是我用一個例子:

// Bootstrap controllers 
var controllers_path = __dirname + '/controllers'; 
fs.readdirSync(controllers_path).forEach(function(file) { 
    if (~file.indexOf('.js')) { 
     app.controllers[file.slice(0, - 3)] = require(controllers_path + '/' + file); 
    } 
    }); 

我的路由器:

app.server.post('/login', app.controllers.users.doLogin); 

而且我的用戶控制器:

exports.doLogin = function(req, res, next) { 
     app.passport.authenticate('local', function(err, user, info) { 
      if (err) { 
       return next(err); 
      } 
      if (!user) { 
       req.flash('error', 'Invalid username or password'); 
       return res.redirect('/login' + (req.body.target ? '?target=' + req.body.target : '')); 
      } 
      req.logIn(user, function(err) { 
       if (err) { 
        return next(err); 
       } 
       return res.redirect(req.body.target || '/'); 
      }); 
     })(req, res, next); 
    }); 
+0

謝謝,但我在使用特別感興趣*文檔中的「內聯中間件方案」之外的* Passport *。 – Ben

+0

請參閱版本 – Vinz243