2012-09-12 179 views
0

我正在尝试使用codeigniter & FB FB SDK登录FB。使用PHP SDK登录Facebook

但它不断给我登录facebook链接,它不捕捉用户是否登录,我是否缺少像会话或其他东西?

而且,由于我们在它,我怎样才能获得扩展会话&我应该保存哪些数据以便在用户离线时发布到页面?

这里是我的控制器:

function __construct() { 
    parent::__construct();  
    $this->load->helper('url_helper'); 
    $this->load->add_package_path(APPPATH.'third_party/facebook/'); 
    $this->config->load('facebook', TRUE); 
    $this->load->library('facebook', array('appId' => $this->config->item('appId', 'facebook'), 'secret' => $this->config->item('secret', 'facebook'))); 
} 

public function index() { 
    $data['LoginURL'] = $this->facebook->getLoginUrl(array('scope' => 'manage_pages')); 
    $data['user']  = $this->facebook->getUser(); 
    if ($data['user']) { 
     try { 
     $data['user_profile'] = $this->facebook->api('/me'); 
     $data['AccessToken'] = $this->facebook->getAccessToken(); 
     } catch (FacebookApiException $e) { 
     // The access token we have is not valid 
     $data['user'] = null; 
     } 
    } 
    $this->load->view('fb_welcome', $data); 
} 

这里是视图:

<!DOCTYPE html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
<body> 
<?php if ($user): ?>  
    User <em><?php echo $user ?></em> is Logged in, AccessToken is <?php echo $AccessToken; ?> 
    <?php print_r($user_profile); ?> 
<?php else: ?> 
    <?php echo anchor($LoginURL, "Login with facebook"); ?> 
<?php endif; ?> 

</body> 
</html> 

回答

0

我不知道代码点火器,但希望这应该证明是一个很好的起点,只是链接到你的FB sdk在包含中,用自己的替换变量,它应该在用户未登录时给用户弹出:

// include the FB SDK 
require_once(APPLICATION_PATH . '/../library/facebook/facebook.php'); 

// create the application instance 
$facebook = new Facebook(array(
    'appId' => $this->facebookConfig->appid, 
    'secret' => $this->facebookConfig->appsecret 
)); 

// get the user id 
$user = $facebook->getUser(); 
if(!empty($user)) { 
    // We have a user ID, so probably a logged in user. 
    // If not, we'll get an exception, which we handle below. 
    try { 

     // do something 

    } catch(FacebookApiException $e) { 
     // If the user is logged out, you can have a 
     // user ID even though the access token is invalid. 
     // In this case, we'll get an exception, so we'll 
     // just ask the user to login again here. 
     $params = array(
      'scope'   => $this->permissions, 
      'redirect_uri' => $this->facebookConfig->applink 
     ); 
     $loginUrl = $facebook->getLoginUrl($params); 

     // log errors 
     error_log($e->getType()); 
     error_log($e->getMessage()); 

     // redirect if not logged in or not enough permissions 
     //echo "<script>top.location=\"".$loginUrl."\";</script>";die; 
    } 

    // Give the user a logout link 
    //echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>'; 
} else { 

    $params = array(
      'scope'   => $this->permissions, 
      'redirect_uri' => $this->facebookConfig->applink 
     ); 
    $loginUrl = $facebook->getLoginUrl($params); 

    // log errors 
    error_log($e->getType()); 
    error_log($e->getMessage()); 

    // redirect if not logged in or not enough permissions 
    echo "<script>top.location=\"".$loginUrl."\";</script>";die; 

} 
+0

T他正是我所做的,并且我成功验证了帐户和权限,然后我通过get vars“state”&“code”重定向到同一页面,但它从未显示为已登录,因此我的猜测会我错过了一个配置或与会话相关的东西。 – Frank

+0

当你转储$ facebook-> getUser()的值时,你会得到什么? – gazzwi86

+0

我得到“int 0” – Frank