如果用户撤销应用程序权限,Facebook PHP-SDK不会取消设置SESSION

时间:2012-03-24 03:04:38

标签: facebook facebook-graph-api facebook-javascript-sdk facebook-php-sdk

修改* * *

我认为我没有足够/正确解释,以下是我遇到会话问题时的步骤:

  

1.-用户使用jssdk登录并接受我的应用程序。

     

2.-现在我使用PHP-SDK来获取getUser();并限制或显示一些页面。

     

3.-用户不会注销,但会直接从配置文件设置中撤消权限。

     

4.-用户返回我的应用程序(当然没有关闭页面/浏览器),PHP-SDK仍然返回getUser()作为有效   连接用户!

     

5.-如果PHP-SDK说getUser()是有效ID,我的应用程序如何知道用户撤销了权限?

我的用户使用JS-SDK和以下代码登录我的应用程序:

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

- 这是异步脚本

<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>`

但是,当用户从隐私设置中删除应用程序并尝试再次访问我的应用程序时,此代码仍会输出用户ID $user = $facebook->getUser();

我检查了PHP-SDK中的facebook.php,并且有一个方法可以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 :(得分:0)

通过Facebook进行会话和许可是两回事。

会话是特定于您的代码的应用程序和用户。你需要控制这个会话。

如果有人撤销了您的应用的权限,那么它会删除Facebook中的权限。除非您在Facebook应用中设置了正确的设置,否则不会通知您的应用。甚至还需要清除会话。

因此,虽然会话将保留之前获得的信息,但如果您尝试连接以使用之前拥有的权限在Facebook上执行某些操作,则会出现错误。