我有一個問題,PHP Facebook的SDK。 我已經閱讀了許多文章談論同樣的問題(訪問令牌無效,重定向循環等),但沒有人可以幫助。Facebook的OpenGraph與Yii框架 - 身份驗證問題
簡單地說,我的項目是如何設計:
它是指僅與登錄Facebook的用戶運行一個Facebook應用程序。 使用Yii Framework,我創建了一個過濾器,每次加載頁面時都會調用該過濾器,以確保只有通過Facebook登錄的用戶才能看到內容。 它應該與Facebook上的應用程序BranchOut完全相同。
我的問題,以及如何重現它:
- 我登錄到使用來自Facebook(OAuth的,訪問令牌)典型的登錄過程
- 我手動註銷Facebook頁面上我的應用程序,然後嘗試在我的應用程序上執行新操作
- 過濾器檢查我是否在Facebook上登錄,並且因爲我沒有登錄,它會將我重定向到Facebook登錄頁面。
- 我再次登錄到Facebook後,我得到了Facebook和我的應用程序過濾器之間的典型無限循環。
這裏是我的過濾器的代碼:
$fb_logged = false;
try
{
$user = Yii::app()->facebook->getUser();
$me = Yii::app()->facebook->api('/me');
$fb_id = $me['id'];
$fb_logged = true;
}
catch (Exception $e)
{
$fb_logged = false;
}
if($fb_logged)
{
print_r($fb_id. ' has logged');
/* Check if user exists on MyApp
... */
}
// If user NOT logged on FB, send him to the FB login page
else
{
$loginUrl = Yii::app()->facebook->getLoginUrl(array(
'redirect_uri' => Yii::app()->getRequest()->getUrl() // I have tried many things here.
));
echo("<script> top.location.href='" . $loginUrl . "'</script>");
Yii::app()->end();
}
究竟是什麼發生的事情是,在FB登錄後,過濾器再次被調用,因爲同樣的URL請求。此時,api('/ me')調用會產生一個異常,因爲它找不到任何有效的訪問令牌,並開始循環。
我可以補充一點,我的配置是好的(或似乎是),我已根據Facebook的應用程序設置檢查了我所有的網址,域名。 我也嘗試了很多東西,像重定向到一個新的特定的URL,但無論如何,我需要使用過濾器,因爲我想確保這仍然是相同的用戶(或因此如果用戶已更改)。
唯一可行的是將用戶重定向到沒有Filter的頁面(沒有調用API(「/ me」))。然後,用手點擊應用程序中的新鏈接,然後找到訪問令牌。這不是我想要的行爲。
我真的很希望有人能幫助我!
在此先感謝。
你到目前爲止發現了什麼問題。我遇到了同樣的問題 –