1

私はsymfony 2で書かれたアプリケーションを持っています(そしてfosubからのカスタムuserproviderでfosfacebookbundleを使用しています)。私はそのアプリケーションでfacebookのjs sdkとphp sdkを使用しています。私のアプリにログインすると、サーフィンが可能です。AIがユーザーのFacebookの友達を表示するページが1つあります。私のバックエンドでは、そのリクエストに /me/friends を使用しています。そのページに約 1 時間とどまり、何の活動もなしに友達が表示されているとしましょう。その時間後にページを更新すると、次のメッセージが表示されます。

An exception has been thrown during the rendering of a template ("An active access token must be used to query information about the current user.") in 

それはどういうわけか私を混乱させます。直接の「Facebook リクエスト」が行われていない私のウェブサイトの他のページにアクセスすることはできます。他のページで Facebook の access_token を var_dump すると、見た目が異なります。たとえば、同じブラウザーで Facebook にログインし、Facebook を介してアプリケーションにログインすると、表示するページで次の access_token を取得します。ユーザーの友人: AAACbRz2shZAIBAFX66jLuQktdlzzIx52lnSvgZB5hiNNxvy0lPbKMcUsC1BHLTnaAllXI9WN7dRHfa5TOj4HmZBjdwgjP5In46dMYSGZBfWrj

Facebook が同じブラウザーの別のタブで開かれています。Facebook からログアウトして、ユーザーの友人が表示されている Web サイトのページを更新すると、上記の例外メッセージが表示されます。別のページを参照し、var_dump で access_token を実行すると、string(48) "170732376699858|6c2b4d7ca20f8a607418845634356" が表示されます。

そのため、ユーザーの Facebook の友達が表示されるページだけが正しく機能していません。

jsサイトで私は次のことをしています:

    function onFbInit() {  

  if (typeof(FB) != 'undefined' && FB != null ) {

        FB.Event.subscribe('auth.authResponseChange', function(response) {
            $.each(reponse, function(e) {
                alert(e);
                });
            });

      FB.Event.subscribe('auth.statusChange', function(response) {
          if (response.session || response.authResponse) {
              setTimeout(goLogIn, 500);
          } else {
              window.location = "{{ path('_security_logout_fb') }}";
          }
      });
  } else  {
      setTimeout(goLogIn, 500);
      }
     }

私が間違っていることは何ですか?access_tokenが有効かどうかをphp sdk経由で確認する方法はありますか? ドキュメントを読みましたが、どういうわけか方法が見つかりませんでした。

オフラインの acces_token は廃止されるため使用していません

ありがとう、ラモ

4

1 に答える 1

1

これは実際には正確に聞こえます。あなたが説明したように、あなたはoffline_accessパーミッションを使用していないので(そしてあなたがそうしないのは正しいです)、ユーザーごとにfacebookによって付与されたトークンはしばらくすると期限切れになります。

サーバー側とクライアント側の両方で、この問題を処理するためのいくつかのオプションがあります。ただし、サーバー側で API リクエストを行っているため、使用しようとしているアクセス トークンが有効かどうかを最初に確認する必要があります。その方法を説明している公式のブログ投稿があります: http://developers.facebook.com/ブログ/投稿/500/

サイト内の他のページではなく、そのページでのみエラー ページが表示される理由については、おそらく、facebook api リクエストを作成するときに例外をキャッチしようとせず、エラーが返されるためです。そのリクエストを行った場所は、それが唯一の壊れたページです。

于 2012-02-15T19:47:22.087 に答える