2013-07-13 44 views
1

我遇到了PHP SDK oauth到Facebook的一些奇怪的行爲。在Firefox中,我可以登錄並允許應用程序。我被重定向到我的測試頁,在那裏輸出我的用戶ID,用戶信息等。美麗!與PHP oauth與PHP的問題

接下來,我打開Chrome或IE或Safari,登錄到Facebook後,我被重定向到同一頁面,但這一次,我沒有顯示爲登錄。沒有用戶ID,我可以驗證我登錄到Facebook。

事情變得更加怪異。我在Firefox註銷時回到Facebook,回到我的測試腳本,它仍然顯示我已登錄。即使我通過LogOutURL完全註銷。發佈$ facebook-> destroySession()後;這終於顯示我正確註銷..現在我無法用任何瀏覽器登錄。

我已驗證我有適當的訪問令牌,並注意到登錄URL中的'狀態'變量隨着我的測試頁上的每個頁面刷新而不斷變化。

任何想法?

這是我的測試代碼..明顯appid和祕密已被刪除。應用程序已創建,並且看起來正在通過Facebook工作......就像我說的,它曾經工作過一次。

<? 
require_once("facebook.php"); 

$config = array(); 
$config['appId'] = 'blahblahblah'; 
$config['secret'] = 'blahblahblah'; 
$config['canvas'] = false; 
$config['fbconnect'] = true; 

$facebook = new Facebook($config); 

var_dump($facebook); 
echo '<br /><br />'; 

echo 'Access Token<br />'; 
var_dump($facebook->getAccessToken()); 

echo '<br /><br />'; 


echo 'Login Status URL<br />'; 
var_dump($facebook->getLoginStatusUrl()); 

echo '<br /><br />'; 

$user = $facebook->getUser(); 

$loginUrl = $facebook->getLoginUrl(); 
echo 'login URL: '.$loginUrl; 
echo '<br />'; 
$logoutUrl = $facebook->getLogoutUrl(); 
echo 'logout URL: '.$logoutUrl; 


echo '<br />'; 

$user = $facebook->getUser(); 

echo var_dump($user); 


echo '<br />'; 

$user = $facebook->api('/me'); 

var_dump($user); 

//$facebook->destroySession(); 
?> 
+0

我討厭Facebook的API。就這些。祝你好運。我希望你能解決它。我會期待着看。 – bozdoz

+0

使用try/catch塊來拋出任何Facebook API錯誤。在瀏覽器控制檯或PHP error_log中很可能會出現錯誤 – phwd

+0

根本沒有錯誤,UserID僅返回爲int(0)。我嘗試了try/catch。 $ facebook-> getUser()只是返回0.我100%登錄,我沒有通過getLoginUrl()發送登錄信息 – hanji

回答

0

我發現了這個問題。我在原木中看到這些:

CSRF state token does not match one provided. 

問題與多個'州'有關。我的測試腳本回應了各種對$ facebook-> getLoginUrl()的調用,這顯然導致了問題。我將測試腳本調整爲$ user是'false',如果是,則調用getLoginUrl()並重定向/驗證...並返回。這就解決了這個問題。

這裏是一個幫助ID這個問題的鏈接: CSRF state token does not match one provided FB PHP SDK 3.1.1 Oauth 2.0