Как выйти из системы, используя 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()
Ни один из них, кажется, не работает.
3 ответа
Вы должны сначала вызвать выход из системы клиента javascript, а затем отправить их в свой скрипт выхода php. Итак, позвоните.js:
FB.Connect.logoutAndRedirect("/path/to/zend/logout/controller");
Вы увидите модальное всплывающее окно с надписью "Вы выходите из этого сайта и Facebook*. Вы будете перенаправлены туда, где находится ваш скрипт выхода из системы:
try
{
$facebook->expire_session();
}
catch (FacebookRestClientException $e)
{
//you'll want to catch this
//it fails all the time
}
Обычно я также вызываю эту функцию в сценарии выхода из PHP, просто для безопасности:
/**
* 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]);
}
(NEW 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]);
}
Вы можете выйти из системы пользователя Facebook и перенаправить пользователя на страницу своего веб-сайта с помощью кода PHP следующим образом:
header ("Location:". $ facebook-> getLogoutUrl (array ('next' => "http://yourwebsite.com/redirectAfterFacebookLogout.php")));