Когда я изначально настраивал SSO с WordPress, пользователи переходили на URL форума, перенаправлялись на страницу входа WordPress и после входа возвращались обратно на форум.
Но в какой-то момент это изменилось, и я не понимаю, как. Теперь после входа в WordPress пользователя перенаправляет в панель управления WordPress.
Кроме того, ещё одна странность: когда я выхожу из Discourse, я вижу сообщение «Вы вышли из системы», но при нажатии кнопки «Обновить» выход не происходит. Я всё ещё могу публиковать сообщения, отвечать и так далее. Иногда мне приходится выходить из системы 2 или 3 раза, чтобы действительно выйти. Так что это работает, но не стабильно.
Есть ли у кого-нибудь идеи, как можно устранить эту проблему?
Вероятно, какой-то плагин WordPress конфликтует с вашими маршрутами и/или перехватывает функции входа. Просто отключите половину плагинов WordPress и проверьте, в какой половине возникает проблема, затем отключите половину плагинов в этой группе и так далее.
Начните с плагинов, связанных с аутентификацией, членством и входом в систему.
Ответ Майкла, скорее всего, верный. Кроме того, установлен ли на вашем сайте плагин WooCommerce? Если да, то вы можете добавить на сайт специальный код для устранения проблемы.
Проблема с выходом из системы может быть связана с проблемой перенаправления при входе. Если отключение плагинов не решит проблему, сообщите нам об этом.
Проблема с входом, похоже, связана с конфликтом плагином MemberPress. Похоже, мне нужно разобраться с ними, чтобы найти возможное решение.
Проблема с выходом была вызвана плагином перенаправления. Перенаправление на главную страницу создавало конфликт с выходом из Discourse.
Майкл — я очень ценю вашу помощь и советы относительно плагинов, которые могут быть виновниками. Это сэкономило мне массу времени, потому что я первым делом проверил именно эти два плагина.
Саймон — спасибо, что рассказал мне о плагине WordPress Health Check. Я раньше о нём не слышал, но сейчас установлю его и буду использовать для диагностики в будущем.
Проверьте настройки плагина на наличие перенаправлений входа. Похоже, что он перенаправляет пользователей на страницу их профиля до того, как плагин WP Discourse сможет перенаправить их обратно в Discourse. Если вы найдете решение, пожалуйста, опубликуйте его здесь. Если не найдете, дайте нам знать. Я могу попробовать установить MemberPress на свой локальный сайт.
Да, плагин Health Check отлично подходит для отладки подобных проблем.
Мне не удалось добиться прогресса в решении этой проблемы с помощью MemberPress. Конфликт точно связан с MemberPress, так как это единственный плагин, где я установил конкретный URL перенаправления, например /jump.
Я не совсем уверен, что делать дальше. Когда кто-то входит в мой сайт на WordPress, я хочу перенаправлять этих пользователей на /jump после входа. Так что MemberPress выполняет свою задачу.
Однако, когда люди заходят на мой форум Discourse, например community.mydomain.com, их перенаправляют на страницу входа WordPress, но после входа их также отправляют на /jump вместо того, чтобы вернуть обратно на форум.
Подскажите, какие настройки вы включили в MemberPress для создания перенаправления? На моём тестовом сайте установлена последняя версия MemberPress, но мне не удалось воспроизвести ни проблему с входом, ни проблему с тем, что пользователи не выходят из Discourse.
Ваш сайт WordPress работает в режиме мультисайта или это обычная установка WordPress?
Возможно, проблема с тем, что пользователи не выходят из Discourse, связана с тем, что ваш сайт Discourse настроен на требование входа для просмотра контента. В этом случае обновление страницы Discourse инициирует вход через SSO. Чтобы полностью выйти из Discourse, необходимо также выйти из WordPress. Это можно сделать, указав в настройке сайта Discourse «logout redirect» адрес https://example.com/?request=logout. Замените example.com на домен вашего сайта WordPress. Дайте знать, если вы это сделали, но проблема всё ещё сохраняется.
Это стандартная установка WordPress (не мультисайт). И выход был исправлен.
Проблема заключается в перенаправлении после входа: пользователи не возвращаются на сайт Discourse после входа в WordPress. Вместо этого, похоже, MemberPress перенаправляет их на страницу по умолчанию в WordPress.
Подскажите, указали ли вы страницу, на которую должны перенаправляться пользователи, в настройках MemberPress? Если да, то какое значение вы задали для этого параметра?
Интересно! Мне нужно оставить эту настройку там, чтобы пользователи могли перейти на сайт WordPress и нажать «Войти».Есть ли у вас идеи, какой PHP-код можно добавить в functions.php, чтобы переопределить это для входа в Discourse?
Проблема возникает в функции track_and_override_login_redirect_mepr. Эта функция подключена через фильтр MemberPress mepr-process-login-redirect-url. Возможно, перехватить эту функцию и переопределить её, проверив установленный запрос. Это можно сделать с помощью функции wp_get_referer().
Сегодня у меня, вероятно, не будет времени разобраться в этом, но я вернусь к этому вопросу в ближайшие дни.
Я ещё раз посмотрел на это, пока оно свежо в памяти. Добавление следующей функции в файл functions.php моей темы решило проблему для меня, но это не было протестировано достаточно тщательно.
Функция подключается к фильтру 'mepr-process-login-redirect-url' до того, как это сделает MemberPress. Затем она проверяет значения параметров запроса, чтобы узнать, был ли запрос инициирован SSO-запросом от Discourse. Если да, то пользователь перенаправляется на главную страницу WordPress с сохранением параметров запроса. Это приведёт к тому, что плагин WP Discourse завершит SSO-запрос. Я думаю, что это всё ещё может работать, даже если ваша главная страница защищена MemberPress, но было бы хорошо это подтвердить.
Если запрос не был инициирован Discourse, вызывается статический метод MeprProductsCtrl::track_and_override_login_redirect_mepr с аргументами, переданными в фильтр.
Я немного колеблюсь рекомендовать добавлять этот код на ваш боевой сайт. Если вы решите его попробовать, убедитесь, что сможете удалить код с вашего сервера на случай, если он сломает ваш сайт. Обязательно протестируйте его с как можно большим количеством уровней пользователей/членства.