我有一个用 symfony 2 编写的应用程序(并使用 fosfacebookbundle 和来自 fosub 的自定义 userprovider)。我在该应用程序中使用来自 facebook 的 js sdk 和 php sdk。登录到我的应用程序并可以四处冲浪。我有一个页面,其中 ai 向用户显示 Facebook 朋友。在我的后端,我使用 /me/friends 来处理该请求。假设我在该页面上停留了大约一个小时,该页面显示没有任何活动的朋友。如果我在那一小时后刷新页面,我会收到以下消息:
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 是否有效?我通读了文档,但不知何故我没有找到办法。
我没有使用离线访问令牌,因为它会过时
谢谢,拉莫