Подтвердить что ты не робот

Как выходить из системы с помощью Facebook Connect в PHP и Zend?

Я пытаюсь создать приложение Connect с помощью PHP и Zend Framework. У меня также есть система аутентификации пользователей на основе Zend_Auth. Теперь я могу войти в систему, используя Facebook, но выход из системы не работает.

Мне нужно очистить идентификатор Zend_Auth, а также удалить всю информацию для входа в Facebook. Какой был бы лучший способ сделать это?

Я попробовал facebook_client->expire_session() и facebook_client->clear_cookie_state(); вместе, а также facebook_client->logout($next) после вызова Zend_Auth::getInstance()->clearIdentity()

Ни один из них не работает.

4b9b3361

Ответ 1

Сначала вы должны вызвать выход из системы javascript, а затем отправить их на выход php script. Итак, вызовите .js:

FB.Connect.logoutAndRedirect("/path/to/zend/logout/controller");

Вы увидите модное всплывающее окно, в котором говорится: "Вы выходите из этого сайта и facebook *. Вы будете перенаправлены туда, где выходите из script:

try
{
    $facebook->expire_session();
}
catch (FacebookRestClientException $e)
{
    //you'll want to catch this
    //it fails all the time
}

Я обычно вызываю эту функцию в выводе PHP script, чтобы быть в безопасности:

/**
 * Remove the local Facebook cookies that get set manually
 * 
 * @return void
 */
protected function _killFacebookCookies()
{
    // get your api key
    $apiKey = $this->getConfig()->getApiKey();
    // get name of the cookie
    $cookie = $this->getConfig()->getCookieName();

    $cookies = array('user', 'session_key', 'expires', 'ss');
    foreach ($cookies as $name) 
    {
        setcookie($apiKey . '_' . $name, false, time() - 3600);
        unset($_COOKIE[$apiKey . '_' . $name]);
    }

    setcookie($apiKey, false, time() - 3600);
    unset($_COOKIE[$apiKey]);       
}

Ответ 2

Вы можете выйти из учетной записи пользователя facebook и перенаправить пользователя на страницу своего сайта с помощью PHP-кода следующим образом:

header ( "Местоположение:". $facebook- > getLogoutUrl (массив ('next' = > "http://yourwebsite.com/redirectAfterFacebookLogout.php" )));

Ответ 3

(НОВЫЙ FACEBOOK SDK) Для меня getconfig() не будет работать. Поэтому мне пришлось найти новые функции из файла base_facebook.php и добавить в него этот бит кода. Затем вызовите его в своем вызывающем файле. Прежде чем вы это сделаете, вызовите $facebook- > destroySession();

 public function _killFacebookCookies() 
    { 
        // get your api key 
        $apiKey = $this->getAppId();
        // get name of the cookie 
        $cookie = $this->getSignedRequestCookieName();

        $cookies = array('user', 'session_key', 'expires', 'ss'); 
        foreach ($cookies as $name)  
        { 
            setcookie($apiKey . '_' . $name, false, time() - 3600); 
            unset($_COOKIE[$apiKey . '_' . $name]); 
        } 

        setcookie($apiKey, false, time() - 3600); 
        unset($_COOKIE[$apiKey]);        
    }