1

私はsymfony 2で書かれたアプリケーションを持っています(fosubのカスタムuserproviderでfosfacebookbundleを使用しています)。私は、そのアプリケーションでは、FacebookやFacebook SDKからSDKを使用しています。 アプリにログインしてサーフィンが可能です。私は1つのページを持っている私はユーザーのFacebookの友人を表示します。私のバックエンドでは、私は/ me/friendsをそのリクエストに使用します。 私は、何の活動もしていない友人を示すそのページに約1時間滞在していると言うことができます。その時間が過ぎてもページをリフレッシュすると、メッセージが表示されます。Facebookのaccess_token fbの友人をリクエストしているときにウェブサイトに奇妙な問題があります

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した場合、それらは異なって見えます。 AAACbRz2shZAIBAFX66jLuQktdlzzIx52lnSvgZB5hiNNxvy0lPbKMcUsC1BHLTnaAllXI9WN7dRHfa5TOj4HmZBjdwgjP5In46dMYSGZBfWrj

がで別のタブでFacebookを利用して開かれた:私は同じブラウザで、Facebookのアカウントでログインし、Facebook経由の私のaplicationにログインしていた場合、私は、ユーザーの友人を表示するページで、次のaccess_tokenはを取得します同じブラウザ:フェイスブックからログアウトし、ユーザーの友達が表示されているウェブサイトのページを更新すると、上記の例外メッセージが表示されます。私は別のページを参照して、access_tokenはをのvar_dumpた場合、私はこの1つを得る: 文字列(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); 
     } 
    } 

私が間違ってやっている任意のアイデア? php sdk経由でaccess_tokenが有効かどうかを確認する方法はありますか?私はドキュメントを読んだが、何とか私は方法を見つけられなかった。

それは

おかげで時代遅れになるだろうので、私はオフラインacces_tokenを使用していないよ、 ラモ

答えて

1

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

この問題は、サーバー側とクライアント側の両方で処理するオプションがあります。 しかし、サーバ側でapiリクエストを行っているので、使用しようとしているアクセストークンが有効かどうかを調べる必要があります。http://developers.facebook.com/blog/post/500/

あなたのサイトの他のページではなく、そのページにのみエラーページを表示します。おそらく、Facebookのapiリクエストを作成するときに例外をキャッチしようとしないためです。エラーが返されますが、要求は、唯一の壊れたページです。

+0

こんにちはNitzan、コードを示しています://データベースに格納されている既知の有効なアクセストークン $ access_token = "YOUR_STORED_ACCESS_TOKEN";しかし、私がデータベースに残したトークンが有効な場合、どうすればよいのでしょうか?私はコメントを読むべきですか? JavaScriptの解決策はありませんか? – ramo

+0

あなたが以前のトークンを持っていれば(セッションではなく、dbではなく、それを保存することもできます)、それを使用するよりも、トークンを取得したときにもタイムスタンプトークンが期限切れになる(これを参照してください:http://developers.facebook。com/docs/authentication /)を使用して、トークンで受け取ったものと現在のタイムスタンプを比較することができます。 あなたはリクエストを行おうとします。失敗した場合は有効なトークンがなく、認証のためにユーザーを送ります。コードが返ってきたら、トークンを交換してタイムスタンプを失効させます –

関連する問題