Выход из Facebook (с использованием PHP SDK) и CodeIgniter - PullRequest
2 голосов
/ 31 мая 2011

До того, как я начал реализовывать аутентификацию 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 оказываются на странице входа.Обычно страница входа автоматически регистрирует их, но к тому времени их сеанс уничтожается.

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Мой код изначально перенаправил пользователей на домашнюю страницу.

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

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 01 июня 2011

Вот что у вас есть: кнопка «Выход», которая указывает на ваш контроллер выхода из системы, и вы пытаетесь заставить свой контроллер выхода вызывать что-то, чтобы заставить пользователя выйти из 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();
}

Надеюсь, это поможет!

...