Facebook PHP SDK Кэширование пользователя - PullRequest
2 голосов
/ 06 декабря 2011

В настоящее время я внедряю сайт, который использует FB Connect, а также нашу собственную систему для обработки входов в систему.В настоящее время пользователь, который ранее посещал наш сайт и подтвердил наши разрешения, автоматически регистрируется при повторном посещении сайта.Кроме того, если пользователь нажимает кнопку выхода из системы, когда он входит в свою учетную запись, используя FB, он выходит из FB.

Прямо сейчас, если пользователь вошел в систему и нажал кнопку «Выйти из системы», он выводит его из FB нормально.Сайт автоматически переходит к созданию нового сеанса, и вызывается проверка, чтобы убедиться, что пользователь все еще вошел в FB с помощью функции PHP SDK getUser ().Кажется, что даже если пользователь вышел из SDK, он кэширует идентификатор пользователя и говорит, что он вошел в любом случае ... из SDK.Вы можете увидеть вызов кеша ниже.Есть ли какой-либо способ переопределить это без изменения FB SDK или я неправильно подхожу к проблеме?

if ($this->user !== null) {
  // we've already determined this and cached the value.
  return $this->user;
}

return $this->user = $this->getUserFromAvailableData();

Ответы [ 3 ]

5 голосов
/ 07 мая 2012

Проблема: что если пользователь вышел из системы через Facebook, а не по предоставленной вами ссылке, которая вызывает убийцу сеанса.

Вы по-прежнему будете кэшировать сеанс, даже если пользователь ушел.

5 голосов
/ 16 декабря 2011

Возможно, это связано с потоком приложений. FB PHP SDK тоже доставил мне неприятности.

Это может помочь, хотя:

Выйдите из системы, перенаправив пользователя на logoutUrl, после чего он будет перенаправлен обратно на ваш сайт. В этот момент вам нужно вызвать $ facebook-> destroySession ();

Посмотрите, что делает этот код (как показано в строке 1092 base_facebook.php ):

/**
 * Destroy the current session
 */
 public function destroySession() {
     $this->setAccessToken(null);
     $this->user = 0;
     $this->clearAllPersistentData();
 }

После этого очистите ваши сеансы в обычном режиме, и пользователь должен полностью выйти из системы, а не кэшироваться.

В моем коде, когда я генерирую loginUrl и logoutUrl, я делаю следующее:

$fb_data = array(
     'loginUrl'  => $facebook->getLoginUrl(array('scope' => 'email,user_birthday')),
     'logoutUrl' => $facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))),
);

Это метод authenticate / kill_session , который я вызываю $ facebook-> destroySession ();

0 голосов
/ 29 октября 2012

Вы можете использовать комбинацию JS и PHP, чтобы решить проблему выхода пользователя из системы с сайта FACEBOOK.

При загрузке страницы загрузите JS getloginstatus (), и в любое время один из них не будет соответствоватьдругой (например, facebook JS loginstatus! = статус входа на ваш сайт), принудительно обновите (через JS) вашу страницу, которая обрабатывает несоответствие.

Это может выглядеть некорректно (страница обновляется автоматически), но это нормально дляя.

...