让我们解释一下这个问题。会有点长,感谢您的耐心等待。
背景:
有一个名为 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 上的大多数解决方案:
- 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。它不起作用。
如果有人知道我还可以尝试什么,我将不胜感激。