Выход из SDK Facebook не работает - PullRequest
3 голосов
/ 12 марта 2012

Я использую Facebook-SDK Facebook для входа в систему, и он работает нормально.У меня проблема с выходом пользователей из системы.После нажатия кнопки выхода из системы, а затем нажатия кнопки входа, он не перенаправляет пользователя на страницу входа в Facebook, а регистрирует их на моем сайте, как если бы выход не был успешным.Вот мой код для входа в систему:

function authenticate_user()
{
    $CI = & get_instance();
    $CI->config->load("facebook",TRUE);
    $config = $CI->config->item('facebook');
    $CI->load->library('facebook', $config);

    $user = $CI->facebook->getUser();

    if ($user)
    {
        try
        {
            $user_profile = $CI->facebook->api('/me');
            return $user_profile;
        }
        catch (FacebookApiException $e)
        {
            error_log($e);
        }
    }

    return FALSE;

}

public function signin()
{
    $user_profile = authenticate_user();
    if (!$user_profile)
    {   
        $loginUrl = $this->facebook->getLoginUrl(array('scope' => 'email'));
        redirect($loginUrl);
    }

    $this->load->model("user_model");

    if ($userRow = $this->user_model->user_exists($user_profile["id"]))
    {
        set_session($user_profile, $userRow->privileges);
        redirect("member_controller/members");
    }
}

Это мой код выхода из системы:

public function fb_signout()
{
    $params = array( 'next' => 'http://www.' + $host + '/index.php/authentication_controller/signout');
    redirect($this->facebook->getLogoutUrl($params)); // $params is optional.
}

public function signout()
{
    $this->session->sess_destroy();
    redirect("http://www." + $host + "/");
}

ОБНОВЛЕНИЕ:

В SDK использовались собственные сеансы PHP ивызов $this->session->sess_destroy() не разрушил бы его, мне нужно было включить session_destroy() в мою функцию выхода из системы.

1 Ответ

3 голосов
/ 22 марта 2012

Facebook SDK использует нативные PHP-сессии, а codeigniter - нет. то, что вы хотите сделать, это добавить session_destroy(); в свой контроллер выхода, чтобы убить собственный сеанс PHP.

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

...