0

FacebookAPIで動作するPHPクラスがあります。

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-アプリケーションを開く

アプリケーションの問題:

5番目のステップの後、私のアプリはユーザーを承認できません。ただし、ユーザーが「更新」を押すと、許可されます。

4

1 に答える 1

0

これは正しい動作ですが、残りのコード(つまり、トークンを取得するビット)がないと確認できません。

ユーザーがログアウトすると、(セッションに保存した)現在のトークンが無効になります。ユーザーがFacebookに再度ログインすると、新しいトークンを取得する必要があります。これは自動的には行われませんが、更新を行うと、コードgetAccessToken()(上記には表示されていません)が新しいトークンを取得すると思います。

最も簡単な修正は、ログインおよびログアウトするためのリスナーをJavascriptに追加することです。詳細はここにあり、 auth.loginハンドラーが必要です。それがトリガーされたら、ページを更新するだけです。

Javascriptを使用して、セッションをバックグラウンドで更新できるPHPリスナーに新しいトークンを送信するオプションは他にもあります。

于 2012-08-23T08:40:56.040 に答える