"必须使用活动访问令牌"(2012年12月)&&为Ajax调用设置Facebook PHP-SDK的正确方法以获取用户ID

hug*_*ige 8 facebook-php-sdk

这让我很头疼.我有一个页面选项卡应用程序,其中数据库交互使用facebook-user-id来分配和保存数据,还用于检查用户权限.在弱势之前,一切都运行良好,但现在随着即将到来的12月变化,这个设置不再起作用了:

config.php文件:

$facebook = new Facebook( array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
)); 
Run Code Online (Sandbox Code Playgroud)

index.php: 包含config.php并获取签名请求(对问题不重要)

javascript.js: 调用read-user-status.php并处理数据

read-user-status.php: 给json-response,包括config.php并调用$ facebook - > getUser() - 函数来获取uid

即使在页面加载后直接从index.php调用,我有时会得到uid,有时我也不会.勉强足够我通常需要等待一段时间,直到我重新加载页面然后再次工作.但情况并非总是如此.这一切对我来说都很奇怪.

编辑:应该提到这个电话:

$uid = $facebook -> getUser();
if ($uid) {
    try {
       // Proceed knowing you have a logged in user who's authenticated.
       $user_profile = $facebook -> api('/me');
    } catch (FacebookApiException $e) {
       error_log($e);
       $uid = FALSE;
     echo "EXCEPTION $e";
   }
}
Run Code Online (Sandbox Code Playgroud)

给出"EXCEPTION必须使用活动访问令牌来查询有关当前用户的信息".

我知道那里有很多类似的问题,但是没有一个答案对我的特殊问题(可能是新的破坏性改变)有问题.

EDIT2:我现在认为它是一个sdk-bug(https://developers.facebook.com/bugs/238039849657148,感谢CBroe).对于解决方案的任何建议当然都是非常受欢迎的.

编辑3,临时解决方案 每次发出ajax请求时,都会发布从FB.getLoginStatus或FB.login获取的令牌,并在php文件中读出并通过$ facebook - > setAccessToken进行设置.不适合所有情况(你肯定需要使用post),速度较慢并带来一些安全问题,但仍然有效.

CBr*_*roe 8

听起来你受到我在11月初报道的bug的影响,https://developers.facebook.com/bugs/238039849657148

他们已经证实了这一点,并表示他们正在努力修复 - 但由于现在只有几天的变化,他们应该快点一点......