2012-04-05 100 views
2

我有以下代碼:Facebook的PHP SDK 3.1.1無限循環

$facebook = new Facebook(array('appId' => $FB_APP_ID, 
          'secret' => $FB_APP_KEY, 
          'cookie' => true)); 
$fb_sess = $facebook->getUser(); 

if (empty($fb_sess)) { 

    $url = $facebook->getLoginUrl(array('response_type'=>'token', 
             'scope' => 'email')); 
    header("Location: $url"); 

} 

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

的問題是,$ fb_sess總是0,因此空($ fb_sess)始終是真實的,所以重定向到一個登錄URL重複無盡。我的應用程序似乎配置正確,我正在使用最新的PHP SDK。任何線索可以解決這個問題,或者至少知道發生了什麼?

回答

0

您缺少redirect_uri參數。 添加REDIRECT_URI

$params = array(
'scope' => 'email', 
    'response_type'=>'token', 
'redirect_uri' => 'http url after login', 
); 

因此,這將只登錄用戶返回到頁面後確認。

+0

你可以在這裏發佈你的$ url嗎? – Madan 2012-04-05 11:18:05

+0

https://www.facebook.com/dialog/oauth?client_id=397110206974921&redirect_uri=http%3A%2F%2Fwww.mywebsite.tld%2Ffbtest.php%3Fstate=044eb4138538b7518dcbdef336c986b3&scope=email – 2012-04-05 11:23:33

+0

此答案不正確。 'redirect_uri'是可選的,當沒有定義時,默認爲最初執行該方法的頁面。 https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/ – 2013-10-22 19:48:02

0

我意識到這個問題已經老了,但我會回答它,以防有人從谷歌來到這裏(就像我一樣)。

首先,註釋掉該行:

header("Location: $url");

和像這樣的東西替代它:

echo "the user appears to be empty try to <a href=".$url.">login</a>";

這種方式,你有機會看看是否有一個問題,並且用戶不會在無盡的重定向循環中迷路。最有可能的錯誤信息會被追加到URL,它會是這個樣子:

error_code=901&error_message=This+app+is+in+sandbox+mode.++Edit+the+app+configuration+at+http%3A%2F%2Fdevelopers.facebook.com%2Fapps+to+make+the+app+publicly+visible

在這個例子的問題是應用程序在沙盒模式。