2011-09-14 91 views
1

可能重複:
Why is Facebook PHP SDK getUser always returning 0?

現在用下面的代碼來驗證Facebook的使用和重定向他們,如果沒有登錄到登錄頁面或需要許可。問題是getUser()總是返回0,導致代碼陷入重定向循環。有任何想法嗎?

include_once("facebook.php"); 

$app_id = 'xxxxxxxxxxxx'; 
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 

// initialize facebook 
$facebook = new Facebook(array(
'appId' => $app_id, 
'secret' => $app_secret, 
)); 

$user = $facebook->getUser(); 
echo $user; 
if ($user) { 
try { 
    $fbme = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
else 
{ 
$loginUrl = $facebook->getLoginUrl(array('scope' => 'email')); 
header('Location: '.$loginUrl); 
} 

回答

1

這不是一個SDK相關的問題,SDK(3.1)運行良好。如果配置錯誤,如果_REQUEST像通過http服務器丟棄的全局變量,則getUser()和PHP-SDK會自動失敗。我使用的是錯誤配置的nginx,並在跟蹤代碼〜3小時後通過vhost配置更改解決了此問題。

+1

你用什麼樣的錯誤配置? – cawecoy

+0

我現在還不記得,但我改變了nginx vhost配置,以正確地將查詢字符串參數傳遞給服務器{}塊中的應用程序。我認爲答案取決於配置。 – edigu

3

經過幾天的搜索,我發現我只是在使用Facebook API時沒有添加「代碼」鍵值。系統需要它才能驗證

當您使用API​​函數$ facebook-> getLoginUrl();它會將您帶到一個登錄頁面(當您正確驗證身份時),只需在導航欄中將代碼=「x」參數返回到您自己的網站即可。因此,在實例化Facebook對象時,您只需使用獲取請求來獲取此信息。

當你的頁面重新加載Facebook的API,確保它的主要價值之一是 「代碼」 => $ _GET [「代碼」], 整理..

真的很生氣,我只好圖這就是我自己..看看這裏的getLoginUrl()文檔http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/,你會發現它無處指定它返回的內容,只是它「授權」應用程序,無論它是什麼意思。

同樣在PHP API文檔的主頁上,這裏找到http://developers.facebook.com/docs/reference/php/,它表明所需參數的最小數量是應用程序密鑰和appID。如果是這種情況,那麼爲什麼添加代碼會對我的問題進行排序?

如果我在說廢話,請回復。我想知道我的方式的錯誤:)。

+0

這對我來說還沒有解決。任何機會,你可以看看http://stackoverflow.com/questions/9498937/why-is-my-test-application-in-an-endless-redirect-loop? – codecowboy

+0

@codecowboy抱歉,缺少複製和粘貼我自己的代碼並「以這種方式進行」我在這種情況下無法提供幫助:/。將代碼降到最低限度,並找出如何最低限度地實現它的工作。猜測這可能與你的loginURL中的scope參數有關。在您接受權限之前,您尚未正式登錄,如果配置不正確,權限框將不會顯示。因此,這可能會創建一個無限循環,您的頁面告訴您您沒有登錄(perms),但登錄頁面顯示您已登錄。但這只是一個猜測。 –

+0

「真的很生氣,我必須自己弄清楚這個......」 - 該文檔頁面明確指出:「請參閱認證頁面瞭解詳細信息」。如果下面的鏈接和閱讀另一頁上的一些更多的信息是要求你太多,那麼也許你最好對自己生氣...... – CBroe