【问题标题】:Modularization in a nodejs/hapi app with passport带有护照的 nodejs/hapi 应用程序中的模块化
【发布时间】:2015-03-03 23:34:13
【问题描述】:

我使用 Hapi 作为 node.js 之上的 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"});
                }); }}}

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

非常感谢。

更新:这是pre v8 api代码,注册方式已更改。

【问题讨论】:

标签: node.js module passport.js hapijs


【解决方案1】:

我最近处理了同样的问题。结果是传递给每个处理程序的request 对象具有对护照插件的引用。我不记得 Passport 到底是什么,但大概是这样的:

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

花一些时间探索request 对象,我发现了许多与该对象相关的答案。例如,如果某人使用 Travelogue 和 Passport 正确登录,您可以在 request.user 上找到他们的用户资料。

【讨论】:

  • 这很棒。非常感谢 Jondim 的建议!
猜你喜欢
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2016-11-10
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多