Функция Facebook getUser (), возвращающая идентификатор пользователя после выхода из системы - PullRequest
15 голосов
/ 05 сентября 2011

Я разрабатываю с использованием Facebook PHP SDK.

Я хотел сделать так, чтобы при выходе пользователя из 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?

С уважением,

Люк

Ответы [ 5 ]

12 голосов
/ 06 октября 2011

У меня такая же проблема!

FB PHP SDK сохраняет эти вещи в $ _SESSION! Вы можете удалить их, как это, когда ваш пользователь нажимает кнопку выхода из системы:

$_SESSION['fb_'.APP_ID.'_user_id'] = '';
$_SESSION['fb_'.APP_ID.'_access_token'] = '';

Хотя это не окончательное решение, оно пока работает.

Я ценю комментарии и решения по этому поводу!

3 голосов
/ 27 июля 2012

Я хочу дать альтернативу, таким образом, вам не нужно обрабатывать сессионные вещи. Хотя я должен предупредить вас, что это медленнее, чем очистка сеанса, поскольку он опирается на новый запрос. В приведенном ниже коде мы проверяем на Facebook, является ли токен действительным. Вот это:

try {
    $facebook->api('/me','GET');
    $logged = true;
} catch(FacebookApiException $e) {
    $logged = false;
}

В моем случае я делал все, используя JavaScript SDK, поэтому не мог очистить сеанс при выходе из системы. Но на моей целевой странице мне нужно было обойти это, прежде чем отправить ответ обратно.

Если вы столкнулись с чем-то подобным, безусловно, хорошее решение.

2 голосов
/ 02 декабря 2011

Проблема, кажется, в php-sdk в basefacebook.php в line 567

         protected function getSignedRequestCookieName() {
         return 'fbsr'.$this->getAppId();}

Этот метод возвращает имя файла cookie, который ищет SDK. Тем не менее, javascript-sdk использует префикс 'fbs_'. Измените это на 'fbs_', и оно отлично работает.

return 'fbs'.$this->getAppId();}
1 голос
/ 24 января 2013
$facebook->destroySession();
0 голосов
/ 27 апреля 2012

Для уничтожения сеанса вы также можете использовать: $ facebook-> destroySession ();

...