【问题标题】:Logout of Facebook (using PHP SDK) and CodeIgniter注销 Facebook(使用 PHP SDK)和 CodeIgniter
【发布时间】:2011-09-05 05:02:53
【问题描述】:

在我开始实施 Facebook 身份验证之前,我的注销控制器如下所示:

# Kill the session
$this->session->sess_destroy();

# Redirect back to main page.
redirect('', 'location');

我尝试修改它以使用户也退出 Facebook,但没有成功。

# Kill the session
$this->session->sess_destroy();

require 'application/sdk/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => '625256',
  'secret' => '25256256',
  'cookie' => true,
));

$session = $facebook->getSession();

if ($session) {
    $location = (string) html_entity_decode($facebook->getLogoutUrl(array('next' => 'http://localhost:8888/taketocollege/')));
    header("Location: $location");
    exit();
}

# Redirect back to main page.
redirect('', 'location');

我做错了什么?我不打算为此使用 Javascript SDK,因为我希望这一切都在控制器中完成。

谢谢!!

编辑:更清楚一点,问题是会话没有被破坏。我的注销控制器将用户发送到主页,但主页通过会话将 Facebook 用户重定向到登录页面。所以 Facebook 用户最终会出现在登录页面上。通常登录页面会自动让他们登录,但到那时,他们的会话就被破坏了。

【问题讨论】:

  • 你对“秘密”这个词的定义很奇怪。你能描述什么不起作用吗?
  • 你使用的是什么版本的 facebook php sdk?
  • 我以前见过那个,但它并没有真正帮助。我使用的是 2.2 版。我在问题中添加了更多信息。

标签: php facebook codeigniter sdk logout


【解决方案1】:

我的代码最初将用户重定向到主页。

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

if($session && !$this->session->userdata('logged_in'))
    redirect('login');

由于会话已更改,该代码将用户重定向到登录页面,而不是完全删除。

通过更改最后两行,我能够解决这个问题:

if($me && !$this->session->userdata('logged_in'))
    redirect('login');

希望它对某人有所帮助!

【讨论】:

  • 如果您自己解决了问题,请接受您自己的答案;)
【解决方案2】:

您在这里拥有的是:一个“注销”按钮,它指向您的注销控制器,并且您正试图让您的注销控制器调用某些东西以使用户从 Facebook 注销。

如果您使用 Facebook 登录您的用户,则不需要注销控制器。您只需在页面中显示注销 URL:

$args['next'] = "http://localhost:8888/taketocollege/";
$logoutUrl = $facebook->getLogoutUrl($args);
echo '<a href="' . $logoutUrl . '">Login with Facebook</a>';

如果您想在用户注销时清除会话,您可以在next 页面上进行(对您而言,http://localhost:8888/taketocollege/):

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if (!$user) {
    $this->session->sess_destroy();
}

希望有帮助!

【讨论】:

  • 感谢您的帮助!不幸的是,我不得不使用 SDK 的 v2.2,它不能很好地与 Javascript SDK 配合使用。不过,我今天终于找到了解决办法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多