我在node.js上使用Hapi作为api框架.我也使用护照进行会话管理和身份验证.
我正在努力寻找一种方法来分离出这些不同组件的逻辑.现在我的大多数请求处理程序都有一个单独的文件 – 我想从主应用程序文件中获取所有处理逻辑.阻止我回来的是一些处理者对护照的依赖.
有问题的初始代码:
//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代码,注册方式已经改变.
最佳答案 我最近处理过同样的问题.事实证明,传递给每个处理程序的请求对象都有对护照插件的引用.我不记得Passport究竟是什么,但它是这样的:
// ...
handler: function(request, reply) {
var passport = request.server.plugins.passport;
}
花一些时间来探索请求对象,我发现很多答案都附在该对象上.例如,如果某人使用Travelogue和Passport正确登录,您可以在request.user上找到他们的用户个人资料.