Функция 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();