2012-01-31 94 views
7

我正在使用Facebook的php庫來驗證用戶到我的應用程序,它工作正常,但由於某種原因,Facebook追加字符#_=_到我返回的uri結束。我讀到他們這樣做,如果redirect_uri參數沒有設置,但我確實已設置,實際上我登錄Facebook後,我已成功重定向到該URL。facebook api追加#_ = _到我的返回uri

下面是如何獲取登錄網址:

$fbLoginUrl = $fb->getLoginUrl(array(
    'scope' => 'email,publish_stream,user_birthday,user_photos,friends_photos', 
    'redirect_uri' => 'http://myapp.net/auth' 
)); 

一切正常,這只是我想美容的事情。誰能幫我?

在此先感謝!

+0

和一個bug在這裏提交, http://bugs.developers.facebook.net/show_bug.cgi?id = 20504 – Jashwant 2012-01-31 04:00:12

回答

4

在Facebook開發人員博客上,有人告訴我們,如果明確設置redirect_uri參數,則不會將#_=_追加到回調函數uri中。但這種情況並非如此。即使設置了redirect_url字段,您仍然可以獲得這些字符。但這對你的流量沒有任何影響。

檢查:Session Redirect Behavior - setting redirect_uri explicitely

+0

嘆息,所以我想這是一個Facebook失敗,然後:( – javiervd 2012-01-31 03:58:52

2

可以擺脫這種客戶端的。

你可能會認爲你可以通過重定向到URL沒有錨解決這個服務器端:

  • Facebook的重定向到http://MyFacebookRedirectUrl...#_=_
  • 然後我們重定向到一些新的URL,而錨

....但#_=_魔術在瀏覽器地址欄中重現 - 如何?

見詹姆斯·皮爾斯的回答在http://developers.facebook.com/bugs/318390728250352

「有些瀏覽器將追加哈希代碼從一個URL到一個新的URL月底,他們已被重定向(如果是新的URL本身並不具有哈希片段)「。

而且這樣的:

http://blogs.msdn.com/b/ieinternals/archive/2011/05/17/url-fragments-and-redirects-anchor-hash-missing.aspx

火狐,Chrome和Opera [現在IE10]一個HTTP/3XX重定向發生後會重新附上網址 片段,甚至雖然 該片段不存在於由所述位置 頭對重定向響應指定的URL

所以如果你只是從你的Facebook重定向頁面做服務器端重定向,你將不得不刪除這個客戶端。

另一種替代方法是將服務器端重定向到一個包含不同命名錨的URL - 但這並不能真正解決問題,並且並非所有瀏覽器都會執行相同的操作。