Javascript Node.js的Passport中间件

Javascript Node.js的Passport中间件,javascript,node.js,passport.js,Javascript,Node.js,Passport.js,我正在为Node.js使用Passport身份验证中间件。我希望在自己的对象中使用它(而不是在管线定义中内联使用)。原因是身份验证机制将根据应用程序设置而改变,我希望保持关注点和可测试性的分离 文档中的使用示例: app.post('/session/create', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); }

我正在为Node.js使用Passport身份验证中间件。我希望在自己的对象中使用它(而不是在管线定义中内联使用)。原因是身份验证机制将根据应用程序设置而改变,我希望保持关注点和可测试性的分离

文档中的使用示例:

app.post('/session/create', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });
我想要这样的东西:

app.post('/session/create', sessionController.create);
…其中会话控制器通过Passport封装身份验证的协调


有人能帮我以这种方式组织使用Passport吗?

以下是我正在使用的一个示例:

 // 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);
    });

谢谢,但我对文档中“内联中间件场景”之外的Passport的使用特别感兴趣。