Facebook PHP SDK可以在Firefox中使用,但不能在Chrome中使用


Facebook PHP SDK works in Firefox but not in Chrome

这个问题一开始听起来可能有点枯燥,我自己也很困惑。。我正在开发一个严重依赖于Facebook API的PHP应用程序,因此使用PHP SDK连接并通过获取当前登录的用户

$fb->getUser();

我还包含了Javascript SDK,但它目前只获取登录用户并将他们的数据对象打印到控制台。

今天,我开始实现该应用程序的本地开发版本,在Facebook上建立了第二个开发应用程序,并将它们连接起来。。它不起作用。getUser()在本地总是为我返回0。不过,我刚刚发现它在Firefox中有效。我var_dump getUser()值,在Firefox中收到一个完整的用户id(我的),但在Chrome中收到0(是的,我在两种浏览器上都登录了Facebook)。

我清除了缓存,cookie,破坏了会话。。我简直无法想象浏览器对Facebook的PHP请求有什么不同?有人经历过这样的事情吗?显然,app_key和secret必须是正确的,因为它可以在Firefox上工作。


编辑:仅供参考,该应用程序的实时版本(托管)在Chrome中运行良好,只有这个非常本地的应用程序我无法使用。


编辑#2:这是我在应用上运行的Javascript

  <div id="fb-root"></div>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : {$_connect.app_id}, // App ID
        channelUrl : '{$_connect.channel_file}', // Channel File
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true  // parse XFBML
      });
    {if !$_user.is_authorized}
    // listen for and handle auth.statusChange events
    FB.Event.subscribe('auth.statusChange', function(response) {
      if (response.authResponse) {
        // user has auth'd your app and is logged into Facebook
        FB.api('/me', function(me){
          if (me.name) {
            console.log(me);
            //window.location = 'index.php';
            // redirection is currently causing loop
          }
        })
      } else {}
    });
    {/if}
    };
    // Load the SDK Asynchronously
    (function(d){
       var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
       if (d.getElementById(id)) {return;}
       js = d.createElement('script'); js.id = id; js.async = true;
       js.src = "//connect.facebook.net/de_DE/all.js";
       ref.parentNode.insertBefore(js, ref);
     }(document));
  </script>

我简直无法想象浏览器对Facebook的PHP请求有什么不同?

当然,唯一的可能是参数。

在这种情况下,Facebook在成功登录时设置的cookie很可能是cookie,浏览器必须接受并发送回服务器,PHP SDK才能识别登录的用户。

因此,当您在本地测试应用程序时,请检查您的Chrome是否接受这些cookie。

我认为,您还需要在两种浏览器中通过JS SDK进行身份验证,我相信JavaScript请求背后有一些OAuth逻辑。

然而,Chrome现在试图阻止或根本不执行跨域js请求。如果发生类似的事情,请尝试查看网络控制台。如果是

  • 请尝试检查本地环境的域+协议/http(s)/。我认为在调用js-api时应该使用https
  • 考虑使用通道文件,它应该解决/防止JavaScript SDK文档中描述的这些跨浏览器调用问题

如果上面没有任何帮助,我想你可以开发这个应用程序,在FFox上测试它,然后在部署后用实际设置测试它。

祝你好运。

相关文章: