Функция getUser() Facebook возвращает идентификатор пользователя после выхода из системы
Я использую PHP SDK для PHP.
Я хотел сделать так, чтобы, когда пользователь выходит из Facebook, они автоматически выходят из моего веб-сайта тоже.
Я использую следующий код для обнаружения сеанса, используя файл cookie сеанса:
$facebook->getUser();
По какой-то причине функция getUser()
по-прежнему возвращает идентификатор пользователя Facebook даже после того, как они вышли из Facebook на своем веб-сайте.
Можно ли сначала определить сеанс, используя другую функцию?
В примере официальной документации здесь, это следующий отрывок из их комментариев:
// Get User ID
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
Это заставило меня поверить, что cookie сеанса для Facebook не будет отменен при выходе из Facebook?
С уважением,
Лука
Ответы
Ответ 1
У меня такая же проблема!
FB PHP SDK сохраняет эти вещи в $_SESSION!
Вы можете удалить их, как это, когда пользователь нажимает кнопку выхода из системы:
$_SESSION['fb_'.APP_ID.'_user_id'] = '';
$_SESSION['fb_'.APP_ID.'_access_token'] = '';
Хотя это не окончательное решение, оно работает пока.
Я ценю комментарии и решения по этому поводу!
Ответ 2
Я хочу дать альтернативу, так что вам не нужно обрабатывать файлы сеанса. Хотя, я должен предупредить вас, что это медленнее, чем очистка сеанса, потому что он опирается на новый запрос. Что мы делаем в коде ниже, это проверить на Facebook, если токен все еще действителен. Вот он:
try {
$facebook->api('/me','GET');
$logged = true;
} catch(FacebookApiException $e) {
$logged = false;
}
В моем случае я делал все с помощью JavaScript SDK, поэтому я не смог очистить сеанс при выходе из системы. Но на моей целевой странице мне понадобилась работа, чтобы проверить ее, прежде чем отправить ответ.
Если вы сталкиваетесь с чем-то подобным, безусловно, хорошим решением.
Ответ 3
Проблема заключается в php-sdk в basefacebook.php
в line 567
protected function getSignedRequestCookieName() {
return 'fbsr'.$this->getAppId();}
Этот метод возвращает имя файла cookie, который ищет sdk. Однако javascript-sdk использует префикс "fbs_". Измените это на "fbs_", и он отлично работает.
return 'fbs'.$this->getAppId();}
Ответ 4
$facebook->destroySession();
Ответ 5
Чтобы уничтожить сеанс, вы также можете использовать: $ Facebook- > destroySession();