带护照的nodejs / hapi app中的模块化

时间:2014-01-28 16:58:00

标签: node.js module passport.js hapijs

我在 node.js 之上使用 Hapi 作为api框架。我也使用 passport 进行会话管理和身份验证。

我正在努力寻找一种方法来分离出这些不同组件的逻辑。现在我的大多数请求处理程序都有一个单独的文件 - 我想从主应用程序文件中获取所有处理逻辑。什么阻碍我的是一些处理者对护照的依赖。

有问题的初始代码:

//init server
var server = new Hapi.Server(config.hostname, config.port);
server.pack.allow({ ext: true }).require(plugins, function (err) { 

    if (err) {
        throw err;
    }
});

//setup auth
var Passport = server.plugins.travelogue.passport;
Passport.use(new LocalStrategy( handlers.authUser ) );

虽然大多数路由是在一个单独的文件中定义的(类似{ method: 'POST', path: '/logout', handler: handlers.logout})但问题是有一些依赖Passport的路由,我不知道如何访问Passport变量在处理程序文件中。

取决于护照的示例路线:

{ method: 'POST', path: '/login', config: {
            handler: function (request, reply) {
                Passport.authenticate('local')(request, function (err) {
                    console.log("successful authentication?");
                    if (err && err.isBoom) {}
                    reply({message: "logged in"});
                }); }}}

我想真正的问题是在不同文件中获取对护照变量的引用的最佳方法是什么?

非常感谢。

更新:这是v8之前的api代码,注册方式已经改变。

1 个答案:

答案 0 :(得分:2)

我最近处理过同样的问题。事实证明,传递给每个处理程序的request对象都有对护照插件的引用。我不记得Passport究竟是什么,但它是这样的:

// ...
handler: function(request, reply) {
  var passport = request.server.plugins.passport;
}

花些时间探索request对象,我发现很多答案都附在该对象上。例如,如果有人使用Travelogue和Passport正确登录,您可以在request.user上找到他们的用户个人资料。