2013-10-10 22 views
1

我們運行一個服務於多個頂級域的Web應用程序。我們目前正在嘗試通過OAuth(Google,Facebook,Twitter)對用戶進行身份驗證。Muti level domain with Facebook App

我們遇到的最初問題是Google不支持訪問多個頂級域名。爲了解決這個問題,我們通過一個頂級域名代理流量,它只是作爲一箇中介,將請求轉發給oAuth提供商,並將回調傳遞給我們不同的頂級域名。這一切都適用於谷歌,但不涉及到Facebook。

Facbook的操作有點不同,它會檢查當前的網址是否爲a)是否在應用程序域中? b)請求初始OAuth對話框時使用的重定向URI是否相同?

我們的流程就是這樣。

請求允許 頂級域名 - >代理 - > Facebook的OAuth的

回調 的Facebook的OAuth - >代理 - >頂級域名

因爲重定向URL被設置爲代理服務器當用戶允許權限時,我無法使用初始頂級域名從API獲取任何信息。

產生的異常是:{「error」:{「message」:「驗證驗證碼時出錯,請確保您的redirect_uri與您在OAuth對話框請求中使用的相同」,「type」:「OAuthException 「,」code「:100}}

任何人都有任何線索如何解決這個問題?

+0

您還必須通過代理域進行訪問令牌的代碼交換。 – CBroe

+0

這就是我卡住的地方。基本Facebook類使用當前的url(getCurrentUrl()),而不是爲此重寫的url。所以每當我嘗試交換令牌的代碼時,它都會使用我的頂級域名。然後拋出一個異常與域中的衝突。我可以改變基本的臉書功能,以適應我的喜好,但不知道這是否是正確的做法。 :p –

回答

0

的PHP SDK可以讓你在替代REDIRECT_URI傳:

$login_url = $facebook->getLoginUrl(array('redirect_uri' => '{TLD URL}', 'scope' => '{SCOPE}')); 

Facebook的應用程序設置頁面,您還可以設置多個域或子域與您的應用程序來使用,所以一定要確保全部加入你的基地域到設置頁面(在App Domains下)。

使用這兩種方法應該可以解決您的問題。