2014-02-07 117 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