0

我有 PHP-Class 可以使用 Facebook API:

class Social {
   private $name;
   private $context;
   private $tocken;

   public function check(){
     $this->tocken = $this->context->getAccessToken(); // get current tocken
     if (isset($_SESSION['fb_tocken']) AND !empty($_SESSION['fb_tocken'])){
        // session tocken not null
        if ($_SESSION['fb_tocken'] == $this->tocken){
           // session tocken = current tocken
           // update last active
           return true;
        } elseif ($this->tocken == APPLICATION_TOCKEN) {
          // current tocken == default tocken
          $this->logout();
        } else {
          // current tocken <> default tocken
          $this->logout();
        }
     } else {
        // session tocken is null
        if ($this->tocken == APPLICATION_TOCKEN){
          // current tocken is default
          return false;
        } else {
          // current tocken is not default
          if ($this->getUserInfo()){
             // user registered - login action
             if ($this->login())
                return true;
             else
                return false;
          } else {
             // register new user
             if ($this->register()){
                if ($this->login()){
                   return true;
                } else
                   return false;
             } else
                return false;
          }
        }
  }
   }
   // ...
};

如果用户使用 alogritm:

1 - 登录 facebook 2 - 登录应用程序 3 - 从 facebook 注销 4 - 登录 facebook 5 - 打开应用程序

应用问题:

第五步后,我的应用无法授权用户。但是如果用户按下“刷新”,他就会被授权。

4

1 回答 1

0

这是正确的行为 - 但如果没有其余代码(即获取令牌的位),则无法确认。

发生的情况是,当用户注销时,当前令牌(您存储在会话中)变得无效。用户重新登录 Facebook,您需要获取新令牌,这不会自动发生 - 但是当您进行刷新时,我认为您的代码 getAccessToken()(上面未显示)将获取新令牌。

最简单的解决方法是在 Javascript 中添加一个侦听器以进行登录和注销。您可以在此处找到详细信息,并且您需要 auth.login 处理程序。触发后,只需刷新页面即可。

还有其他选项使用 Javascript 将新令牌泵入 PHP 侦听器,该侦听器可以在幕后更新您的会话。

于 2012-08-23T08:40:56.040 回答