2011-10-07 85 views
2

部分需要登錄和不能使用客戶端身份驗證使用javascript等,因此在使用HTTP請求的請求驗證服務器端:服務器端授權和請求超時到Facebook?我的應用程序的

https://graph.facebook.com/oauth/access_token?client_id=[app_id]&client_secret=[secret]&redirect_uri=[uri]&code=[code]

這工作得很好,大部分時間。但是,我間歇性地從這個請求中得到超時/空響應。我可以運行一個反覆要求這個頁面的工具,並且可以在80-90%的時間內獲得成功。只要發生一次故障,對於任何用戶,所有請求都會失敗幾秒鐘,然後再次運行。

有沒有其他人經歷過這樣的事情,或者你知道是否有Facebook的請求上限超過一定的閾值?我無法在文檔中找到任何聽起來類似的信息。

回答

1

這是因爲如果你發送太多請求,facebook認爲你想進行DDOS攻擊並阻止你的請求一段時間。

+1

我認爲,以前,但我沒有提出任何接近足夠的要求,肯定嗎?該應用程序擁有大約10萬用戶,並且每天只需要30-40,000個API來提供我的見解。 – Abby

+0

如果是這種情況,那麼您應該在「API」選項卡上的應用程序見解中找到關於它的信息。 – CBroe

0

在app Insights中,您可以從診斷頁面檢查API throtting,也可以檢查性能頁面中最常見的錯誤。如果您沒有看到任何錯誤或沒有被阻止,則可以更改應用程序邏輯,如果您收到超時/空響應,請再次請求該令牌。

+0

不對我的診斷進行限制,也沒有錯誤。我已經實施了一次重試,但其中一些在成功之前必須重試20-30次。 – Abby

1

您必須僅爲您的會話檢索令牌一次。其他方式肯定會讓FB防守反擊。 但是,如果您未申請'offline_access'特殊權限,則您的令牌有到期時間。 默認值爲retentionPeriod = 2,retentionUnit =小時。 也許你應該問

scope=offline_access 

到您的許可,那麼只有retreive用戶令牌一次。 此外,您需要執行

try{my api call} catch(bad token){ reload the new token and retry } 

這是重新問令牌,如果任何API調用與authenticaion錯誤而失敗。

+0

我認爲使用offline_access來解決這個問題已經過時了,但我同意緩存令牌以確保它只被請求一次是個不錯的主意。但是,如果您嘗試在用戶中籤名,則無法使用緩存的令牌,因爲顯然,您需要檢查用戶是否已實際登錄,而不僅僅是您的訪問令牌在OAuth 2.0中存儲 – Abby

+0

以及fb cookie正在爲此設立。 – 2011-11-01 19:51:50

+0

@ Guillaume-Pelletier Cookie是否會繞過[Abby](http://stackoverflow.com/users/911412/abby),擔心您不能使用緩存的令牌以防萬一他們沒有真正登錄? – dumbledad

相關問題