[英]Facebook PHP SDK: $facebook->getUser() sometimes returning 0
[英]how to stop facebook sdk from returning uid in $facebook->getUser()
所以我正在尝试为我的网站编程Facebook注销功能
事情是使用Facebook注销按钮,而是从Facebook网站而不是从我的网站注销用户
所以我当前的逻辑是单击注销按钮时,它调用了我应用程序的注销功能并且会话被清除等
但是然后我在其他地方也有逻辑,如果$ facebook-> getUser()正确返回uid,则从数据库中获取用户信息并将其设置为已登录
有没有办法防止$ facebook-> getUser()返回正确的用户ID?
IE,当用户单击注销时,不应从实际的Facebook网站注销,而且$ facebook-> getUser()也不应返回正确的ID,这样他就不会自动重新登录
Facebook如何知道该用户已退出您的网站? 在本地数据库上放置一个标志,指示该用户已注销。 在$ facebook-> getUser()之后检查它。
使用Facebook SDK时要记住的一点是,当您进行身份验证时,实际上是分别登录Facebook和您的网站-您需要满足这种逻辑。
登录到Facebook后,将创建身份验证cookie(而不是会话)。 您可能正在使用会话进行站点身份验证,但是Facebook使用的是Cookie。
您需要调用$ facebook-> destroySession(); 如果您不希望在后续调用中返回UID。
看一下我的CodeIgniter代码,* index.php / authenticate / kill_session *方法调用上面的destroySession(); 方法并清除我的应用会话-这完全使我退出了Facebook和我的应用:
<?php
class Facebook_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->config->load('facebook');
$config = array(
'appId' => $this->config->item('facebook_api_key'),
'secret' => $this->config->item('facebook_secret_key'),
'fileUpload' => false,
);
$this->load->library('Facebook', $config);
}
public function connect()
{
$user = $this->facebook->getUser();
$profile = null;
if($user)
{
try {
$profile = $this->facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
$fb_data = array(
'me' => $profile,
'gender' => $profile['gender'],
'uid' => $user,
'loginUrl' => $this->facebook->getLoginUrl(array('scope' => 'email,user_birthday')),
'logoutUrl' => $this->facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))),
);
return $fb_data;
}
public function disconnect()
{
$this->facebook->destroySession();
}
} // EOC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.