Вопрос или проблема
Недавно я настроил частный сайт Managed WordPress на GoDaddy с BuddyPress, используя плагин Force Login, чтобы сделать его приватным для 20 или около того жильцов конюшни. Я также установил плагин The Events Calendar, чтобы предоставить календарь, который будет поддерживаться владельцем конюшни, чтобы все могли видеть, когда кузнецы, ветеринары, тренеры и клиницисты будут приходить в конюшню. Все работает хорошо, кроме:
Страница /events, которая встроена в The Events Calendar, имеет хорошую функцию поиска событий, а также возможность изменить вывод, чтобы показать события в списке или в пределах одного месяца или дня. Но когда нажимается любая из кнопок Найти, Список, Месяц или День, ничего не происходит. Используя инструменты разработчика Chrome, я вижу, что проблема в том, что нажатие любой из этих кнопок вызывает ответ 403 на XMLHttpRequest, сделанный плагином к REST конечной точке в плагине. Я проверил, что отключение плагина Force Login устраняет 403 и позволяет этим кнопкам вести себя ожидаемым образом.
Я не знаком с использованием REST API и довольно не уверен в любой кодировке, но моей первой реакцией было редактировать исходный код плагина, чтобы добавить “withCredentials = true;” к объекту XHR перед его отправкой, полагая, что проблема явно в том, что ajax-запрос не указывает, что контекст запроса вошел в WordPress. Это не решило проблему, и некоторые исследования показали статью, объясняющую, что поле withCredentials не имеет эффекта при запросе с того же источника, которым в этом случае и является.
Я обратился за помощью на форум поддержки плагина, но не добился успеха, потому что для его воспроизведения нужно быть вошедшим на сайт, а форум поддержки не позволяет отправлять учетные данные для входа на сайт. Они только могли сказать, что это проблема, вызванная плагином Force Login, и что я должен обратиться в поддержку этого плагина.
Возможно, это так, и я свяжусь с поддержкой Force Login, но у меня есть предчувствие, что проблема должна быть в коде The Events Calendar, что он каким-то образом не удается передать контекст входа на конечную точку.
Есть предложения?
Ответ или решение
Проблема: 403 Forbidden в XMLHttpRequest плагина The Events Calendar при использовании кнопки «Найти события»
Введение
Проблема, с которой вы столкнулись, связана с 403 Forbidden ответами на XMLHttpRequest, которые инициируются плагином The Events Calendar при попытке взаимодействия с REST API. При этом вы используете плагин Force Login, который ограничивает доступ к вашему сайту только для авторизованных пользователей. Это создает конфликт между механизмами аутентификации обоих плагинов.
Анализ проблемы
Когда вы кликаете по кнопкам «Найти события», «Список», «Месяц» или «День», The Events Calendar пытается сделать запрос к REST-эндпоинту, который не обрабатывается должным образом из-за настроек плагина Force Login. Ваша логика о том, что проблема связана с отсутствием указания, что запрос осуществляется от авторизованного пользователя, может быть верной, однако, самостоятельно модифицируя код, вы могли не учесть некоторые аспекты.
-
REST API и аутентификация: WordPress использует специальную систему куки и токены для аутентификации AJAX-запросов, и это зависит от настроек, установленных в используемых плагинах. Плагин Force Login, вероятно, блокирует или не пропускает определенные запросы, поскольку они не соответствуют его критериям безопасности.
-
Проблема с конфигурацией: Изучив ваши настройки, можно предположить, что Force Login может быть слишком жестким в отношении обработки REST-запросов, что и приводит к выданию 403 ошибки.
Рекомендации
-
Настройка плагина Force Login:
- Проверьте настройки плагина Force Login. Возможно, в нем есть опция для исключения определённых URL (включая URL REST API), которая позволит вам не блокировать вызовы из The Events Calendar.
-
Использование пользовательских хуков:
- В зависимости от документации обоих плагинов, вы можете использовать хуки WordPress (action и filter) для изменения поведения Force Login относительно AJAX запросов, например, добавив разрешение на выполнение запросов к REST API для определенных ролей пользователей.
-
Логирование запросов:
- Внедрите систему логирования всех запроса к REST эндпоинтам во время их выполнения, чтобы детализировать, какие конкретно запросы блокируются, и определить, почему это происходит.
-
Обратитесь к поддержке:
- Учитывая, что вам уже предложили обратиться к поддержке плагина Force Login, не стесняйтесь делать это. Подготовьте детальное описание проблемы и всю информацию, включая шаги по воспроизведению, чтобы они могли предложить более конкретные решения.
-
Рассмотрите альтернативы:
- Если вам не удастся решить проблему с помощью Force Login, возможно, стоит рассмотреть использование другого плагина для обеспечения безопасности вашего сайта, который будет более совместим с The Events Calendar.
Заключение
Проблема с 403 Forbidden при использовании плагина The Events Calendar в комбинации с Force Login может быть решена через тщательную настройку и анализ. Убедитесь, что вы понимаете возможности и ограничения каждого плагина, а также используйте сообщество и поддержку для достижения оптимального результата. Ваше время и усилия, инвестированные в устранение таких проблем, в конечном итоге приведут к созданию более функционального и удобного для пользователей сайта.