2012-10-18 196 views
0
<?php 

require 'facebook/facebook.php'; 
require 'config/fbconfig.php'; 
require 'config/functions.php'; 

define('APP_ID', '******************'); 
define('APP_SECRET', '***********************'); 

$facebook = new Facebook(array(
      'appId' => '******************', 
      'secret' => '***********************', 
      'cookie' => true 
     )); 

$session = $facebook->getSession(); 



if (!empty($session)) { 
    # Active session, let's try getting the user id (getUser()) and user info (api->('/me')) 
    try { 

     $uid = $facebook->getUser(); 
     print_r($uid); 
     $user = $facebook->api('/me'); 
     facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
     facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2; 
    } catch (Exception $e) { 




    } 

    if ($user) { 
     # User info ok? Let's print it (Here we will be adding the login and registering routines) 
     echo '<pre>'; 
     print_r($user); 
     echo '</pre><br/>'; 
     $username = $user['name']; 
     $user = new User(); 
     $userdata = $user->checkUser($uid, 'facebook', $username); 
     if(!empty($userdata)){ 
      session_start(); 
      $_SESSION['id'] = $userdata['id']; 
$_SESSION['oauth_id'] = $uid; 

      $_SESSION['username'] = $userdata['username']; 
      $_SESSION['oauth_provider'] = $userdata['oauth_provider']; 
      header("Location: home.php"); 
     } 
    } else { 
     # For testing purposes, if there was an error, let's kill the script 

     die("There was an error."); 
    } 
} else { 
    # There's no active session, let's generate one 
    // $login_url = $facebook->getLoginUrl(); 
    $loginUrl = $facebook->getLoginUrl(array(
          'canvas' => 1, 
          'fbconnect' => 0, 
          'req_perms' => 'email,publish_stream', 
         'next' => 'http://localhost/login_twitbook/', 
           'cancel_url' => 'http://localhost/login_twitbook/' 
        )); 
    header("Location: " . $login_url); 
} 
?> 

$ user = $ facebook-> api('/ me');沒有正常工作,它總是沒有任何回報。請幫我解決這個問題。 $ uid = $ facebook-> getUser()其返回值,但$用戶不返回facebook-> api('/ me')不能在本地主機上工作。

+1

在'catch'分支,轉儲異常變量$ e的值,看看是否有任何地方的錯誤。 – CBroe

+1

即使它不相關,看起來您仍在使用*非常舊的SDK版本。更新你的代碼到[最新版本](https://github.com/facebook/facebook-php-sdk),檢查附加的例子,它應該工作。 – ifaour

+0

好的電話ifaour,我也可以保證舊版本的SDK導致這些類型的問題。 –

回答

0

嘗試更改base_facebook.php文件中的getCode函數,將所有$ _REQUEST更改爲$ _GET 。不知道爲什麼這個問題還沒有解決,但是我把我的頭髮拉出來試圖弄清楚爲什麼它會爲用戶返回0,直到我這樣做,現在它完美地工作。

應該在文件的第680行或其附近,並且有4個要更改。

protected function getCode() { 
if (isset($_GET['code'])) { 
    if ($this->state !== null && 
     isset($_GET['state']) && 
     $this->state === $_GET['state']) { 

    // CSRF state has done its job, so clear it 
    $this->state = null; 
    $this->clearPersistentData('state'); 
    return $_GET['code']; 
    } else { 
    self::errorLog('CSRF state token does not match one provided.'); 
    return false; 
    } 
} 

return false; 

}

+0

這沒有意義。我有一種感覺,這不是真正的問題。你不應該改變FB PHP SDK才能正常工作。另外,$ _REQUEST應該包含所有與PHP中的$ _GET相同的值。 –

+0

我只是關注什麼對我有用,除此之外沒有別的。不要問我爲什麼,問Facebook>。< –

+0

我相信它很有效,並且很好的分享,這只是一個非常糟糕的解決方案,我認爲這可能是一個巧合。您是否嘗試將其更改回$ _REQUEST以確保它仍然中斷?你也有最新的FB PHP SDK嗎? –

相關問題