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

Facebook PHP SDK可以在Firefox中使用,但不能在Chrome中使用,php,facebook,firefox,google-chrome,Php,Facebook,Firefox,Google Chrome,这个问题一开始听起来可能有点乏味,我自己也感到困惑。。 我正在开发一个PHP应用程序,它严重依赖Facebook API,因此使用PHP SDK连接并通过 $fb->getUser(); 我还包括了Javascript SDK,但它目前只获取登录用户并将其数据对象打印到控制台 今天我开始实现这个应用程序的本地开发版本,在Facebook上建立第二个开发应用程序,将它们连接起来,瞧。。它不起作用。 getUser()始终在本地为我返回0。 但我刚刚发现,它在Firefox中工作。 我var

这个问题一开始听起来可能有点乏味,我自己也感到困惑。。 我正在开发一个PHP应用程序,它严重依赖Facebook API,因此使用PHP SDK连接并通过

$fb->getUser();
我还包括了Javascript SDK,但它目前只获取登录用户并将其数据对象打印到控制台

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

我清除了缓存,cookies,破坏了会话。。我无法想象浏览器对Facebook的PHP请求有什么不同? 有人经历过这样的事情吗? 显然,app_密钥和密码必须是正确的,因为它可以在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>

window.fbAsyninit=函数(){
FB.init({
appId:{$\u connect.app\u id},//app id
channelUrl:“{$\u connect.channel\u file}”,//channel file
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
{if!$\u user.is\u authorized}
//侦听并处理auth.statusChange事件
FB.Event.subscribe('auth.statusChange',函数(响应){
if(response.authResponse){
//用户已验证您的应用并登录到Facebook
api('/me',函数(me){
如果(我的名字){
console.log(me);
//window.location='index.php';
//重定向当前正在导致循环
}
})
}else{}
});
{/if}
};
//异步加载SDK
(职能(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);
}(文件);
我无法想象浏览器对Facebook的PHP请求有什么不同

当然,唯一的问题是参数

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


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

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

然而,Chrome现在试图阻止或干脆不执行跨域js请求。如果发生类似情况,请尝试查看网络控制台。如果有

  • 尝试检查本地环境的域+协议/http/。我相信您应该在调用JSAPI时使用https
  • 考虑使用通道文件,该文件应能解决/防止中所述的交叉浏览器调用问题
如果上面没有任何帮助,我想你可以开发这个应用程序,在FFox上测试它,然后在部署后用真实的设置测试它


祝你好运。

可能是你不允许在chrome中使用facebook应用程序。因为我最近也使用了facebook SDK,它在所有浏览器中都运行良好。@YogiYogesh应用程序的实时版本在Chrome中也能运行,所以不会那么容易,谢谢!我也有同样的问题,让我知道你是怎么解决的,所以我并没有真的解决。它在实时版本上工作,两边的设置和配置都完全相同,所以我决定不再深入研究,以节省时间并完成项目。在最近的一个项目中,我不得不建立一个更简单的基于facebook的登录系统,并让它像那样运行,所以我想我在这方面对你没有任何广泛的帮助,对不起:\n我是用PHPThanks的javascript SDK instaead解决的。我回头查看,在我的本地应用程序的上下文中似乎没有来自facebook的cookies。要么是Chrome不允许,要么是因为其他错误,它们从未被创建。放弃这一点,facebook Cookie被创建。但它仍然只通过getUser()为我提供0。然后检查您自己(本地)域/主机名下的Cookie。更新,很抱歉延迟接受。我仍然没有在Chrome中解决这个问题,但这似乎是我问题的唯一有效解释。我去掉了完整的PHP SDK,只在客户端通过Javascript处理Facebook,因此问题本身就消失了,页面现在快了很多。嗨,Nitram,谢谢你的回答。我确实忘记了将频道文件的url更改为本地路径,但这也没有解决问题。如上所述,我也包含了JS-SDK,并且能够从中接收用户数据(因此它基本上可以工作)。但是PHPSDK仍然返回0。我已经比较了10次app_键之类的东西,都是正确的。非常感谢:)您是否只包含JSSDK,或者在api初始化之后调用FB.login或FB.getLoginStatus(如果您之前已登录)?这对我来说很有帮助(即使我拥有这个应用,也许我不需要这么做),让OAuth授权你使用这个应用。我自己也遇到了一些问题,但是从JavaScript登录基本上解决了这个问题(我想)我包括