2012-11-07 85 views
0

我有一個使用PHP SDK的Facebook應用程序。這一切都工作正常,除了當用戶訪問它在移動設備上(通過訪問apps.facebook.com/myappname/使用他們的網絡瀏覽器),登錄陷入了一個無限的重定向循環(大概不斷地將它們重定向回Facebook登錄頁面)。僅在移動設備上驗證應用程序失敗

登錄代碼是非常標準:

$userID = $facebook->getUser(); 
if ($userID) { 
    [store stuff in session] 

} else { 
    [Javascript redirect to $facebook->getLoginUrl()] 
} 

這是工作前,但必須被打破與Facebook的最近的變化之一。

+0

您是否嘗試更改用戶代理來測試您的理論並確認發送和接收的標頭? – David

+0

如果我使用移動用戶代理,我可以重複該問題。 Facebook使用查詢字符串中的代碼參數正確地重定向,但getUser()調用返回null,因此登錄部分失敗。儘管如此,仍然適用於臺式機。 –

+0

管理修復它(當您可以調試時更容易!) - 感謝指出我在正確的方向。 –

回答

0

在這裏回答我自己的問題。看起來Facebook不再發送signed_request POST數據與移動設備,這就是爲什麼我的登錄代碼不像以前那樣工作。另外,成功登錄後,我重定向到apps.facebook.com/myappname(爲了將應用程序保留在Facebook iframe中),但這導致登錄過程在移動設備上循環。

我的修復方法是更改​​應用設置中的移動網址以包含查詢字符串參數,以便區分來自移動/桌面的登錄後請求。對於正常請求,我重定向到apps.facebook.com/myappname。對於移動的我不知道。所以移動設備不再位於Facebook iframe中,但實際上這種方式更好。

相關問題