2012-11-18 78 views
4

我已經閱讀了1000多個關於redirect_uri必須在兩次OAuth調用中相同才能獲得用戶令牌的博客,但無論100%的時間我如何格式化URL,它失敗:OAuth&facebook access_token無法正常工作,需要OAuth專家

{ 
    "error": { 
     "message": "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request", 
     "type": "OAuthException", 
     "code": 100 
    } 
} 

我在確保兩個調用中的URL完全相同的過程中一絲不苟。我的網址必須有?在其中,我試圖用%3f替換它,但這並沒有幫助。必須有其他的東西可以導致這個錯誤,我需要了解可能是什麼?

這似乎在過去的一個月裏突破了我。我們在7月下旬進行了一場演出,事情運行良好(由於它是一個不同的服務器,因此該節目的基本URL不同)。難道這個網址就是這種格式:

someprestuff.morestuff.mainurl.com?prm=value 

Facebook上是否有太多的「部分」接受它?

我正在尋找替代的東西來尋找。

回答

7

url應該是相同的,它必須被轉義。在URL它看起來像這樣:以上

http%3A//someprestuff.morestuff.mainurl.com%3Fprm%3Dvalue 
+18

它也證明您在Facebook中用於您的基URL的URL必須以反斜槓結尾。 Facebook將允許你在沒有它的情況下創建一個基本的URL,但是如果你打算在你的客戶端的URL上使用任何參數,即使你的2個URL在你的客戶端代碼中100%匹配,你也必須有反斜槓。我無法在任何地方找到這個文件。 –

+0

@JimHunter你是對的。如果你可以添加它作爲答案,這將是有幫助的! –

2

吉姆的評論工作,但澄清,它是固定它爲我們正斜槓。

+0

正斜槓在哪裏? – unclesol

1

今天有同樣的問題,這個問題竟然是該REDIRECT_URI使用HTTP:// URL模式,而Facebook只接受https://開頭

0

我完成了一個服務器上跟蹤這個問題是在負載均衡器後面。事實證明,儘管負載均衡器通過了HTTP_X_FORWARDED_PROTO頭,但在V3 PHP Facebook庫,PHP和Apache之間,標頭還沒有被識別。

這裏是從庫的相關代碼:

protected function getHttpProtocol() { 
    if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { 
     if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { 
     return 'https'; 
     } 
     return 'http'; 
    } 
    /*apache + variants specific way of checking for https*/ 
    if (isset($_SERVER['HTTPS']) && 
     ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) { 
     return 'https'; 
    } 
    /*nginx way of checking for https*/ 
    if (isset($_SERVER['SERVER_PORT']) && 
     ($_SERVER['SERVER_PORT'] === '443')) { 
     return 'https'; 
    } 
    return 'http'; 
} 

正如你所看到的,這裏有收容幾個方案,所以你必須確保任何情況適用於您的配置是否正確這段代碼要成功。

最有可能的解決方案將在您的Facebook配置陣列中設置trustForwardedtrue

相關問題