2012-06-23 30 views
4

我成功地使用Node.js的+快速+ Everyauth(https://github.com/abelmartin/Express-And-Everyauth/blob/master/app.js)從我的應用程序登錄到Facebook,Twitter等。使用Everyauth/Express和多種配置?

我試圖繞到我的頭的問題是,Everyauth似乎是「配置和忘記。」我設置了一個everyauth對象,並將其配置爲用作express的中間件,然後將其忽略。例如,如果我想創建一個移動Facebook登錄我做的:

var app = express.createServer(); 
everyauth.facebook 
     .appId('AAAA') 
     .appSecret('BBBB') 
     .entryPath('/login/facebook') 
     .callbackPath('/callback/facebook') 
     .mobile(true);  // mobile! 
app.use(everyauth.middleware()); 
everyauth.helpExpress(app); 
app.listen(8000); 

這裏的問題: 移動和非移動客戶端將連接到我的服務器,我不知道這是連接到連接已完成。更糟糕的是,我需要支持多個Facebook應用程序ID(並且,我不知道在客戶端連接並部分解析輸入之前我會使用哪一個)。因爲everyauth是一次配置的單例,所以我看不到如何根據所做的請求對配置進行這些更改。

看起來我需要創建某種中間件,它在Everyauth中間件之前配置everyauth對象,以便everyauth隨後使用正確的appId/appSecret/mobile參數。我不知道如何去這個...

建議?

這裏是我迄今爲止最好的主意,但它似乎可怕: 使用每個不同的entryPath 每一個可能的配置創建everyauth對象...

回答

0

顯然我偷步寫了這樣在我喝上一杯咖啡之前,因爲我回答了我自己的問題,而且這很容易實現。基本上,我剛剛創建自己的自定義明確的中間件切換everyauth配置everyauth沾到請求其骯髒的爪子之前,所以......

var configureEveryauth = function() 
{ 
    return function configure(req, res, next) { 
     // make some changes to the everyauth object as needed....   
     next(); 
    }; 
} 

,現在我的設置變爲:

var app = express.createServer(); 
everyauth.facebook 
    .entryPath('/login/facebook') 
    .callbackPath('/callback/facebook'); 
app.use(configureEveryauth()); 
app.use(everyauth.middleware()); 
everyauth.helpExpress(app); 
app.listen(8000); 

請注意,我甚至都不會在啓動期間完全配置everyauth Facebook對象,因爲我知道中間件會填充缺少的參數。

+0

如何使所有everyauth代碼到另一個文件,並在我們的中間件需要? 'app.use(function(req,res,next){'./ auth/facebook').init(req,res,next); });' facebook文件將包含所有與everyauth。 'findOrCreateUser','return promise'等... –