2

過去3か月間正常に動作していた私のアプリは、Facebookのいくつかの変更により、新しい問題が発生しました。アクセストークンを取得するとき:

$facebook->getAccessToken();

有効なトークンを返し、ユーザー情報を取得します。しかし、別のページで、同じ関数を使用してアクセストークンを取得し、アプリIDを含む無効なアクセストークンを取得します。アクセストークンを取得してセッションに保存し、別のページで使用しようとしましたが、例外OAuthException: An active access token must be used to query information about the current user. が表示されますが、トークンは有効です。 ここで確認しました

「 2012年12月5日変更」がこの理由である可能性がありますか?私のアプリケーショントークンは1分未満有効だと思います。私を助けてください。

コード->

$facebook = Yii::app()->facebook;
try {
    $facebook_uid = $facebook->getUser(); 

    $accessToken = $facebook->getAccessToken();
    $fbuser = $facebook->api('/me');

 }catch(Exception $e) {

     $access_token = $_SESSION['fb_396582000367255_access_token'];
     $facebook->setAccessToken($access_token);
 }
4

3 に答える 3

5

これはバグhttps://developers.facebook.com/bugs/404450666302585ですが、ShawnCarterの回避策を使用できます。彼の回避策を使用する場合は、FacebookSDKがセッションをクリアしないようにする必要があります。それがあなたがそれを一度だけ機能させる理由です。これを行うための大雑把で非常に汚い方法は、すべての永続データをクリアするためにfacebook.phpメソッドを変更することです。

protected function clearAllPersistentData() {
  return;
  foreach (self::$kSupportedKeys as $key) {
      $this->clearPersistentData($key);
  }
}

さらに、他の人(セッションが設定されていない人)のために機能するためには、Facebookがそのことを一度実行できるようにする必要があります。だから私がしているのは:

$tok = $facebook->getAccessToken();

if(strpos($tok, $config["appId"]) == 0 && isset($_SESSION["fb_" . $config["appId"] . "_access_token"]))
{
    $facebook->setAccessToken($_SESSION["fb_" . $config["appId"] . "_access_token"]);
    $tok =$_SESSION["fb_" . $config["appId"] . "_access_token"];
}

これはすべて非常に汚れていることに注意してください。クリアセッションで水を濁したので、ユーザーのログアウト、アプリの削除と追加など、他の認証状況を処理するために、自分でセッションをクリアする必要があります。 SDKが修正されるまで、短期的にこれを行うことができます。SDKをコードに残さないでください。

于 2012-12-06T17:34:34.917 に答える
2

これを試して。少し故障していて、trycatchのelseスイッチでトークンを設定していたもの。

$facebook = Yii::app()->facebook;
try {
    $facebook_uid = $facebook->getUser(); 
     $access_token = $_SESSION['fb_396582000367255_access_token'];
     $facebook->setAccessToken($access_token);
    //$accessToken = $facebook->getAccessToken();
    $fbuser = $facebook->api('/me');

 }catch(Exception $e) {


 }
于 2012-12-06T16:12:15.307 に答える
1

代わりにfbsr_396582000367255_access_tokenを試してくださいfb_396582000367255_access_token

于 2012-12-06T18:48:54.133 に答える