Как выходить из системы с помощью 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()
Ни один из них не работает.
Ответы
Ответ 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]);
}