首页 文章

退出Facebook(使用PHP SDK)和CodeIgniter

提问于
浏览
2

在我开始实施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,因为我希望在控制器中完成所有操作 .

谢谢!!

EDIT: 为了更清楚一点,问题是会话没有被破坏 . 我的注销控制器将用户发送到主页,但主页将Facebook用户重定向到登录页面的会话 . 因此Facebook用户最终登录页面 . 通常,登录页面会自动将其登录,但到那时,它们的会话将被销毁 .

2 回答

  • 0

    你在这里有一个:“注销”按钮,指向你的注销控制器,你试图让你的注销控制器调用一些东西,让用户从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();
    }
    

    希望有所帮助!

  • 0

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

    $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');
    

    希望它可以帮到某人!

相关问题