1

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

背景
有一个名为 Mediawiki 的框架,被 Wikipedia 使用。还有一个名为 Facebook login 的 3rd-party 扩展,它声称我可以允许人们通过 Facebook 帐户登录到 Mediawiki 网站。

问题
它们都是用 PHP 编写的。我的 Mediawiki 网站环境是

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

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

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

我的调试故事

首先,官方 Github repo 遗漏了一个名为ExternalUser.php的文件,我从 [path_to_mediawiki]/include 复制它并将其放入此扩展程序中。

http://d.pr/f/F0MC这个链接是我的工作版本。它仅适用于 Firefox,但不适用于 Chrome

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

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

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

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

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

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

FacebookInit.php第 46 行

$facebook = new FacebookAPI();

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

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

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

当我在 Firefox 上尝试这个时,它会返回一个正整数,对于马克扎克伯格来说是 4,对于其他人来说是 12345678。但是当我在 Chrome 上尝试这个时,它总是会返回 0。

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

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

4

2 回答 2

1

如果您在 Chrome 中有类似 Avast Online Security(版本 9.0.2002.45)扩展程序,只需禁用它,然后刷新页面。

似乎 avast 正在阻止 facebook JavaScript 代码(不知道为什么)。

于 2013-12-17T02:43:34.400 回答
0

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

于 2013-09-30T05:19:49.400 回答