我们来解释一下这个问题。这会有点长,所以感谢你的耐心等待。
背景:
有一个名为Mediawiki的框架,由维基百科使用。还有一个名为Facebook登录的第三方扩展,声称我可以允许人们通过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回购错过了一个名为 ExternalUser.php 的文件,我将其从[path_to_mediawiki] / include复制并将其放入此扩展名。
http://d.pr/f/F0MC此链接是我的工作版本。 它只能在Firefox中声明,但在Chrome中不起作用
为什么我要问facebook-> getUser()返回0 :
我通过打印出一些错误日志来跟踪整个扩展,以检查变量的值。
Chrome和Firefox之间的唯一区别是:
当我在Google Chrome上测试时,在弹出窗口中输入我的Facebook用户名和密码后,点击“登录”按钮。当我刷新Facebook网站时,它已经显示为“已登录”状态。但是,在我的mediawiki网站上,该页面在登录页面中自动刷新,无法重定向到“已登录”状态和页面。
所以,我猜可能Chrome中的会话/ 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上尝试此操作时,它将返回一个正整数,对于Mark Zuckerberg为4,对于其他一些人为12345678。但是当我在Chrome上试用它时,它将始终返回0.
我在Stack OverFlow上尝试了大部分解决方案:
如果有人知道我还能尝试什么,我会很感激输入。
答案 0 :(得分:0)
如果您在Chrome中安装了Facebook应用(可以在“应用”下的Chrome“主页”上找到),请将其卸载然后再次尝试Facebook连接登录。
答案 1 :(得分:0)
如果您在Chrome中使用了Avast Online Security(版本9.0.2002.45)扩展程序,只需将其停用,然后刷新页面即可。
似乎avast阻止了facebook JavaScript代码(不知道为什么)。