Расширение Facebook в MediaWiki работает только в Firefox, а не в Chrome. $facebook->getUser() return 0
Давайте объясним эту проблему. Это будет немного долго, так что спасибо за ваше терпение.
Фон:
Существует фреймворк под названием Mediawiki, который используется в Википедии. И есть стороннее расширение с именем Facebook login, которое утверждает, что я могу разрешить людям входить на сайт Mediawiki через учетную запись Facebook.
Проблема:
Оба они написаны на 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. Я проверил настройки 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.
- API Facebook: getUser() всегда возвращает 0 Это говорит о том, что я должен включить Facebook.php. Конечно, оригинальный код уже включил его.
- Приложение Facebook не работает должным образом в IE. Установите запрос HEAD. Хотя это может решить проблему в IE, это не решает мою проблему в Chrome
- Facebook Connect - после входа всплывающее окно зависает в бесконечном цикле. Установите переменные куки как true. Не работает
Если кто-нибудь знает, что еще я могу попробовать, я был бы признателен за вклад.
2 ответа
Если у вас есть что-то вроде расширения Avast Online Security (версия 9.0.2002.45) в Chrome, просто отключите его и обновите страницу.
Похоже, что avast блокирует код JavaScript на Facebook (понятия не имею, почему).
Если у вас установлено приложение Facebook в Chrome (вы можете найти его на "домашней странице" Chrome в разделе "приложения"), удалите его и повторите попытку подключения через Facebook.