这让我很头疼。我有一个页面选项卡应用程序,其中 DB-interaction 使用 facebook-user-id 分配和保存数据以及检查用户权限。直到不久之前,一切都运行良好,但现在随着即将到来的 12 月更改,此设置不再起作用:
配置.php:
$facebook = new Facebook( array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
index.php: 包含 config.php 并获取签名请求(对问题不重要
javascript.js: 调用read-user-status.php并处理数据
read-user-status.php: 给出 json-response,包括 config.php 并调用 $facebook -> getUser()-function 来获取 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";
}
}
给出“异常必须使用活动访问令牌来查询有关当前用户的信息”。
我知道那里有很多类似的问题,但没有一个答案对我的特定问题(并且可能对所依赖的新突破性更改)有帮助。
EDIT2:我现在认为它是一个 sdk 错误(https://developers.facebook.com/bugs/238039849657148,感谢 CBroe)。任何解决方法的建议当然都非常受欢迎。
编辑 3,临时解决方案 每次发出 ajax 请求时,都会发布从 FB.getLoginStatus 或 FB.login 获得的令牌,并在 php 文件中读出并通过 $facebook -> setAccessToken 设置它。并非在所有情况下都适用(您肯定需要使用 post),速度较慢并带来一些安全问题,但仍然有效。