0

我正在尝试在 iframe 应用程序中请求某些权限时向 facebook 验证(登录)用户。

我将 JS SDK 与 PHP SDK 结合使用。因此,首先我检查用户是否已登录并且使用 PHP 一切正常$facebook->getUser(),当失败时,我将用户重定向到运行此 JS 的页面:

FB.getLoginStatus(function(response) {
    if (response.status === "connected") {
        // Ok, go home
    } else {
        FB.login(function(response) {
            if (response.authResponse) {
                // Ok, go home
            } else {
                // Cancelled, go home
            }
        }, {scope: '<?php echo implode(',', $this->permissions); ?>'});
    }
});

然后,这将创建一个请求权限的登录对话框。如您所见,在某些情况下,用户已正确进行身份验证/授权以及对话框何时被取消。在任何一种情况下,我都需要做一件事:重定向回我的应用程序的根目录。

因此,对话框弹出,用户登录,然后他被重定向回我使用 PHP 到getUser().

这里的问题是,用户第一次登录并重定向时,getUser()总是为空,没有用户会话。如果我刷新包含我的应用程序 iframe 的 facebook 页面,则存在会话并且权限设置正确,表明对话框已完成它的工作。

关于为什么第一个重定向不起作用的任何想法?

我发现了类似的问题,但没有给我一个具体的、有效的解决方案。

4

1 回答 1

0

如果其他人有同样的问题,这就是我学到的:

  1. Facebook 声称在使用 JS 设置会话 cookie 后会向 PHP 提供会话 cookie,但事实并非如此,至少并非始终如此!
  2. 唯一的解决方案(至少是我能想到的唯一解决方案)是每当您使用 JS 登录到后端 (PHP) 时手动传递访问令牌。将其存储在会话中,并在可用时使用它而不是 Facebook API 尝试使用的访问令牌。打电话$api->setAccessToken($yourNewToken);
  3. 您可以继续测试以查看令牌何时可用,但对我而言,它通常在第二次 api 调用后立即可用。
于 2013-06-18T10:15:51.993 回答