2013-04-27 70 views
1

所以,我使用Node.js + Swagger + MongoDB。Swagger + Node.js的異步驗證功能

我試圖驗證所有的請求都帶有一個有效的auth_token,這是一個存儲在mongo用戶上的值。 我的問題是Swagger支持的驗證器需要返回true或false,但由於我必須檢查Mongo以驗證auth令牌,整個驗證將變爲異步。

下面是情況下,代碼,你需要它:

swagger.addValidator(
    function validate(req, path, httpMethod) { 
     var apiKey = req.headers["auth_token"]; 
     if (!apiKey) { 
     apiKey = url.parse(req.url,true).query["auth_token"]; 
     } 

     models.user.validateAuthToken(apiKey, function(err, valid) { 
     //Here is where I know if the auth token is valid and it checks against Mongo, so it's async 
     }); 

    return [something]; //this is what the validation sequence is expecting this function to do: return true or false 
}); 

我怎樣才能解決這個問題呢?

回答

1

你不能,你可能想打開一個與swagger票證啓用異步驗證。

+0

哦,我做了,並提交了拉請求。讓我們希望他們接受它。如果有人需要它,我叉起大搖大擺,爲我的需求創建了一個單獨的模塊,並修復了它,它叫做:swagger-node-express-ext – Deleteman 2013-05-15 16:55:10

+0

@Deleteman:這個問題有什麼更新嗎?我看到了您的存儲庫,但未找到請求並且您的回購已過期。另外,我在谷歌組上發現了這個討論,也談到了我找不到的一些拉取請求:https://groups.google.com/forum/#!topic/swagger-swaggersocket/UIgWkXYHBh0 – wegenerd 2014-05-09 23:53:20

0

並且返回異步函數的結果不起作用?

swagger.addValidator(
    function validate(req, path, httpMethod) { 
     var apiKey = req.headers[ 'auth_token' ]; 
     if (!apiKey) { 
     apiKey = url.parse(req.url, true).query[ 'auth_token' ]; 
     } 

     return models.user.validateAuthToken(apiKey, function(err, valid) { 
     // check against mongo 
     return validation; 
     });  
}); 
+0

我給它一個鏡頭,但它聽起來不像JS會等待validateAuthToken方法返回以便從addValidator返回,它可能會返回null。不過謝謝。 – Deleteman 2013-04-29 03:38:47

1

你在使用Swagger 1.2還是2.0?如果使用2.0,則可以使用swagger-tools連接中間件,以根據Swagger文檔爲安全處理程序的請求進行連接。它支持Swagger Specification中定義的所有安全機制。

+0

這是一個老問題,我可能使用的是1.2,但最好在這裏提供這些更新的信息,以防其他人遇到同樣的問題。 – Deleteman 2015-02-25 10:43:34