8

这让我很头疼。我有一个页面选项卡应用程序,其中 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),速度较慢并带来一些安全问题,但仍然有效。

4

5 回答 5

8

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

他们已经确认并说他们正在努力解决问题——但由于距离现在只有几天的时间了,他们应该快一点……</p>

于 2012-12-02T11:19:08.690 回答
2

我通过执行以下操作得到了这个工作......

if(!$user){

$loginUrl = $facebook->getLoginUrl(array(
                'scope' => 'email',
                'redirect_uri' => $app_url
                ));
    header('Location: ' . $loginUrl);
}

我还添加了我的应用程序以集成:

  • 使用 Facebook 登录的网站
  • 脸书上的应用
  • 页面选项卡
于 2012-12-07T13:59:18.850 回答
0

如果你很幸运,并且你的 php sdk 版本仍然在 _graph 方法声明之后注册会话变量:

//在下面找到这个方法
        受保护的函数 _graph ($path, $method = 'GET', $params = array ())
        {

//粘贴在下面的_graph方法声明代码之后:
            if (isset($_SESSION["fb_".$this->getAppId()."_access_token"]))
            {
                $this->setAccessToken($_SESSION["fb_".$this->getAppId()."_access_token"]);
            }
//到这里
//你可以走了
//请记住:您的 sdk 版本必须在会话中注册访问令牌变量
//在ajax调用之后
//我使用 git 来获取在 github 上发布的 sdk 的最后一次提交之前的版本
于 2013-05-13T15:09:50.410 回答
0

尝试通过向请求添加访问令牌。

$accessToken = $facebook->getAccessToken();
$user_profile = $facebook->api('/me?access_token=' . $accessToken);
于 2012-11-30T08:42:43.403 回答
0

我找到了一个解决方法,直到它被修复(看起来,在更改发生之前不会及时)。每次您发出 ajax 请求时,您都会发布从 FB.getLoginStatus 或 FB.login 获得的令牌,并在 php 文件中读出并通过 $facebook -> setAccessToken 设置它。并非在所有情况下都适用(您肯定需要使用 post),速度较慢并带来一些安全问题,但仍然有效。

于 2012-12-01T16:46:47.547 回答