mediawiki的Facebook扩展程序仅适用于Firefox,而不适用于chrome.$facebook->get


mediawiki's Facebook extension only works in firefox, not chrome. $facebook->getUser() return 0

让我们解释一下这个问题。这会有点长,所以感谢您的耐心等待。

背景
有一个名为Mediawiki的框架,由维基百科使用。还有一个名为Facebook登录的第3方扩展,它声称我可以允许人们通过Facebook帐户登录Mediawiki网站。

问题
它们都是用PHP编写的。我的媒体维基网站环境是

+---------------+-----------+
|    Product    |  Version  |
+---------------+-----------+
| MediaWiki     | 1.20.6    |
| PHP           | 5.4.9     |
| MySQL         | 5.5.31    |
+---------------+-----------+

对于Facebook登录扩展,我从github获得最新版本 github.com/garbear/facebook-mediawiki

它在Chrome中不起作用,但在Firefox中运行良好。

我的调试故事

首先,官方的 Github 存储库缺少一个名为 ExternalUser.php 的文件,我从 [path_to_mediawiki]/include 复制它并将其放入此扩展名中。

http://d.pr/f/F0MC 此链接是我的工作版本。它只能像Firefox中声称的那样工作,但在Chrome中

不起作用。

为什么我问facebook->getUser()返回0

我通过打印一些错误日志来检查变量的值来跟踪整个扩展。

Chrome和Firefox之间的唯一区别是:

当我在谷歌浏览器上测试它时,我在弹出窗口中输入我的Facebook用户名和密码后,单击了"登录"按钮。当我刷新Facebook网站时,它已经显示为"已登录"状态。但是,在我的mediawiki网站中,该页面在登录页面中保持自动刷新,并且无法重定向到"已经登录"状态和页面。

所以,我想Chrome中的会话/cookie设置可能有问题。 我检查了我的Chrome设置,一切都是默认设置。我卸载了Chome并重新安装了它,但我仍然遇到同样的问题。

我的下一步是(必须是)调试此扩展。在花了整整 2 天调试此扩展后,我假设我找到了与此问题相关的确切代码。

FacebookInit中.php第46行

$facebook = new FacebookAPI();

要调试,让我们将其修改为

$facebook = new FacebookAPI();
error_log("==log===> ".$facebook->getUser(),0);

附加语句会将变量$facebook->getUser()写入 apache 错误.log

当我在 Firefox 上尝试此操作时,它将返回一个正整数,如马克扎克伯格的 4,12345678其他人的 4。但是当我在 Chrome 上尝试此操作时,它将始终返回 0。

我已经尝试了Stack OverFlow上的大多数解决方案

  • Facebook PHP SDK在Firefox中工作,但在Chrome中不起作用,它尚未解决,OP使用JavaScript而不是PHP
  • getUser() 返回 0 建议下载新版本的 Facebook PHP SDK。我做到了,但这并没有解决我在 Chrome 中的问题。
  • Facebook
  • API : getUser() 总是返回 0 这告诉我要包含 Facebook.php。当然,原始代码已经包含了它。
  • Facebook应用程序在IE中无法正常运行 设置请求HEAD。虽然这可以解决IE中的问题,但它不能解决我在Chrome中的问题
  • Facebook Connect - 登录后弹出窗口在无限循环中挂起 将变量 cookie 设置为 true。它不起作用。

如果有人知道我还能尝试什么,我将不胜感激。

如果您在Chrome中有类似Avast在线安全(版本9.0.2002.45)扩展程序的内容,只需禁用它,然后刷新页面即可。

看起来avast正在阻止facebook JavaScript代码(不知道为什么)。

如果您在Chrome中安装了Facebook应用程序(您可以在Chrome"主页"的"apps"下找到它),请卸载它,然后再次尝试Facebook connect登录。