Facebook PHP-SDK не сбрасывает сессию, если пользователь отменяет разрешения приложения - PullRequest
0 голосов
/ 24 марта 2012

РЕДАКТИРОВАТЬ ***

Я думаю, что я не объяснил достаточно / правильно, вот шаги, когда у меня проблема с сеансом:

1.- Пользователь входит в систему с помощью jssdk и принимает мое приложение.

2.- Теперь я использую PHP-SDK для getUser ();и ограничить или показать некоторые страницы.

3.- Пользователь НЕ выходит из системы, но отзывает разрешения непосредственно из настроек профиля.

4.- Пользователь возвращается в мое приложение (не закрываястраница / браузер, конечно), и PHP-SDK по-прежнему возвращает getUser () как действительный подключенный пользователь!

5.- Как мое приложение должно знать, что пользователь отменил разрешения, если PHP-SDK говоритgetUser () является действительным идентификатором?

Мои пользователи входят в мое приложение с помощью JS-SDK и следующего кода:

FB.login(function(response) {
              // handle the response
            }, {scope: 'email,user_likes'});

- и это асинхронныйscript

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '****************', // App ID
      channelUrl : 'localhost', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true,  // parse XFBML
      oauth:true
    });

    // Additional initialization code here
  };

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
</script>`

Однако, когда пользователи удаляют приложение из своих настроек конфиденциальности и пытаются снова получить доступ к моему приложению, этот код по-прежнему выводит идентификатор пользователя $user = $facebook->getUser();

Я проверил facebook.php из PHP-SDK, и есть метод, который должен unset SESSION, но ничего не сбрасывает.

  protected function clearPersistentData($key) {
    if (!in_array($key, self::$kSupportedKeys)) {
      self::errorLog('Unsupported key passed to clearPersistentData.');
      return;
    }

    $session_var_name = $this->constructSessionVariableName($key);
    unset($_SESSION[$session_var_name]);
  }

Это ошибка?или Facebook всегда читает сессию, даже если пользователь отозвал разрешения приложения?

Я думаю, что поведение $facebook->getUser(); должно выдавать 0, когда пользователь не подключен к приложению, но, конечно, этоэто не то, что происходит.

1 Ответ

0 голосов
/ 24 марта 2012

Сеанс и разрешение через Facebook - это две разные вещи.

Сессия - это приложение и пользователь, специфичный для вашего кода. Вы должны контролировать этот сеанс.

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

Таким образом, в то время как сеанс будет содержать информацию, которую он получил ранее, если вы попытаетесь подключиться, чтобы выполнить что-то на Facebook с разрешениями, которые у вас были ранее, вы получите ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...