2014-01-28 25 views
4

我使用Hapi作爲在之上的api框架node.js。我還使用會話管理和認證護照模塊化與護照nodejs/hapi應用程序

我竭力要找到一種方法來分離出這些不同組件的邏輯。現在,我爲大部分請求處理程序都有一個單獨的文件 - 我希望從主應用程序文件中獲取所有處理邏輯。有什麼讓我反感的是一些處理者對護照的依賴。

有問題的初始化代碼:

//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變量。

例路線取決於護照:

{ 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代碼,註冊方式已更改。

+0

FYI存在SO關於與集成了HapiJS PassportJS的問題(與最近的解決方案):http://stackoverflow.com/a/25193729/2075782 –

回答

2

最近我處理了同樣的問題。發現傳遞到每個處理程序的對象request有一個對護照插件的引用。我不記得它到底是什麼了護照,但它是這樣的:

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

花一些時間去探索request對象,我發現很多附加到該對象的答案。例如,如果有人與遊記和護照正確登錄,你可以找到request.user其用戶配置文件。

+0

這是偉大的。非常感謝Jondim的建議! – bornytm