2012-11-18 53 views
1

我正在製作一個服務器軟件,允許支持Facebook的模塊。 問題在於回撥URL。如果一個客戶端啓動授權過程,則另一個客戶端同時啓動該過程,或者在第一個用戶完成之前啓動該過程。我怎麼能檢查用戶先完成了什麼?抄寫員 - 多個回調同時

我需要一種方法來檢查我得到什麼客戶端的回調。一種解決方案是鎖定其他人,直到第一個完成,但我不想這樣做。有另一種方法嗎?我曾考慮在回調結束時包含?client=clientid,但是我聽說Facebook只允許在Facebook上的應用中指定的確切網址。

UPDATE 它無法將client =「clientid」添加到回調中。任何其他想法?

回答

2

經過一些更多的searchig我想facebook將允許一個參數:狀態。 (感謝@jacob https://stackoverflow.com/a/6470835/1104307

所以我只是做了?state = clientId。

對於使用劃線的代碼的人是這樣的:

service.getAuthorizationUrl(null) + "&state=" + clientId; 
1

我認爲添加和GET參數(如client = clientID)沒有問題。 Facebook會將您重定向到您指定的URL,並使用REQUEST參數您可以檢查誰完成了請求。如果您將URL指定爲http://yoursite.com並傳遞重定向至http://some-sub-domain.yoursite.com或完全不同的位置,則存在問題。

+0

所以我就做什麼? ( 「?客戶=」 callbackURL + +的clientId) .callback – totokaka

+0

沒有工作以及..: '{ 「錯誤」:{ 「消息」:「錯誤驗證驗證碼,請確保您的REDIRECT_URI是與您在OAuth對話框請求中使用的相同「, 」type「:」OAuthException「, 」code「:100 } }' – totokaka

1

,如果您使用的是服務器端的流量那麼的OAuth 2流量將是:

  1. 將用戶重定向至Facebook則
  2. Facebook的rediects用戶到你指定的回調
  3. 您的服務器使用的東西像捲曲,以獲得訪問令牌
  4. 您的服務器做一些更多的捲曲來獲得,也許更多的用戶數據或更新用戶的數據

我的建議是在步驟1中設置會話cookie,同時將此會話ID存儲在服務器上。那麼會話cookie將自動發送到步驟2中的回調URL,並且您可以通過這種方式識別數據庫中的會話。

這將適用於所有服務提供商(谷歌,推特,linkedin等),並且是維持會話連續性的首選方式。

+0

好吧,但我該如何添加sessionCookie? – totokaka

+0

如果您使用的是PHP,那麼您可以使用'setcookie'函數,如果您使用的是javascript,那麼您將使用'document.cookie'。 – mulllhausen