在访问fb朋友时,Facebook访问网站上的奇怪问题

时间:2012-02-15 19:13:59

标签: facebook-graph-api symfony facebook-php-sdk facebook-access-token

我有一个用symfony 2编写的应用程序(并使用fosfacebookbundle和来自fosub的自定义userprovider)。我在那个应用程序中使用来自facebook的js sdk和php sdk。 登录我的应用程序并可以浏览。我有一个页面,我显示用户的Facebook朋友。在我的后端我使用/我/朋友的请求。 让我说我在那个页面上停留约一个小时,显示没有任何活动的朋友。如果我在那个小时后刷新页面,我收到消息:

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请求”。如果我在其他页面上var_dump facebook access_token,它们看起来不同,例如如果我在同一个浏览器中登录facebook并通过facebook登录我的应用程序,我会在显示用户朋友的页面上获得以下access_token:         AAACbRz2shZAIBAFX66jLuQktdlzzIx52lnSvgZB5hiNNxvy0lPbKMcUsC1BHLTnaAllXI9WN7dRHfa5TOj4HmZBjdwgjP5In46dMYSGZBfWrj

Facebook在同一浏览器的另一个标签页面中打开:如果我现在从Facebook注销并刷新我的网站上显示用户朋友的页面,我会收到上述异常消息。如果我浏览到另一个页面,并且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);
      }
     }

任何想法我做错了什么? 有没有办法通过php sdk来检查access_token是否有效?我仔细阅读了文档,但不知怎的,我找不到办法。

我没有使用离线acces_token,因为它已经过时了

谢谢, 拉莫

1 个答案:

答案 0 :(得分:1)

这实际上听起来完全正确。由于您没有使用offline_access权限(并且您没有使用),因此您在每个用户使用Facebook授予的令牌会在一段时间后过期,如您所述。

您可以在服务器端和客户端处理此问题。 但是,由于您要在服务器端发出api请求,因此您需要先了解您要使用的访问令牌是否有效,还有一篇很好的官方博客文章解释了如何:http://developers.facebook.com/blog/post/500/

至于为什么你只在那个页面上得到一个错误页面,而不是你站点中的其他页面,这可能是因为你在制作facebook api请求时没有尝试捕获异常,然后返回错误,但是它是你提出这个请求的唯一地方,那是唯一一个破碎的页面。