使用PHP SDK登录Facebook
问题描述:
我正在尝试使用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>
答
我不知道代码点火器,但希望这应该证明是一个很好的起点,只是链接到你的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;
}
T他正是我所做的,并且我成功验证了帐户和权限,然后我通过get vars“state”&“code”重定向到同一页面,但它从未显示为已登录,因此我的猜测会我错过了一个配置或与会话相关的东西。 – Frank
当你转储$ facebook-> getUser()的值时,你会得到什么? – gazzwi86
我得到“int 0” – Frank