У нас WP выступает провайдером SSO (мы управляем доступом к Discourse и контенту LMS с помощью MemberPress на WP). Регистрация и вход новых пользователей работают безупречно, но выйти из системы у меня никак не получается.
Я добавил редирект с ?request=logout, но стоит только обновить страницу после выхода, как я снова оказываюсь в системе.
Сначала я подумал, что проблема может быть в том, что WP открыт в другой вкладке браузера, но поведение сохраняется даже после выхода из WP и закрытия вкладки.
Кажется, мы очень близки к решению. Надеюсь, кто-нибудь захочет поделиться советами по устранению неполадок, чтобы мы могли наконец закрыть этот вопрос.
Спасибо.
Вот небольшой гиф, демонстрирующий (2) попытки выхода подряд.
Похоже, у вас всё настроено правильно. Это обычный сайт WordPress или часть мультисайтовой установки? Возможно, возникла проблема с синхронизацией выхода из системы для сайтов, отличных от основного в сети.
Судя по вашей записи экрана, ваш сайт Discourse настроен на требование входа. Происходит следующее: Discourse перенаправляет вас на сайт WordPress с запросом SSO, а затем автоматически выполняет вход, поскольку вы всё ещё авторизованы в WordPress. Ожидаемое поведение — вы должны оказаться на странице входа в WordPress как неавторизованный пользователь.
Синхронизация выхода из системы с Discourse зависит от хука WordPress clear_auth_cookie. Возможно, другой плагин на вашем сайте мешает его работе.
Если у вас есть тестовый сайт, попробуйте отключить все плагины, кроме WP Discourse, и посмотрите, сохранится ли проблема. Если у вас нет тестового сайта, вы можете попробовать отключить плагины для сессии вашего пользователя с помощью плагина Health Check. Подробная информация о том, как использовать этот плагин для отключения плагинов на время сессии, доступна здесь: Troubleshooting using the Health Check – Make WordPress Support.
Бум. У меня нет dev-сайта, но плагин проверки работоспособности сработал идеально — даже с первой попытки. Похоже, мне предстоит погрузиться в MemberPress и auth_cookie. Спасибо, Саймон.
Вот шаги, которые я предпринял, на случай если кому-то другому они понадобятся:
Установил плагин Health Check.
– Перевёл сайт в режим устранения неполадок.
– Включил плагин WP-Discourse.
Открыл сайт Discourse.
– Выйдя из системы.
– Был перенаправлен на страницу входа в WP (форма входа отсутствовала).
– Не смог снова войти в Discourse вообще. (Желаемое поведение.)
Включил MemberPress.
– (Я понял, что страница входа использует поля логина/пароля, сгенерированные MemberPress.)
– Форма входа снова появилась.
Открыл сайт Discourse, уже был в системе.
Попытался выйти, был перенаправлен по кругу обратно на Discourse, всё ещё в системе.
Я использую WP с 2007 года и никогда не слышал об этом плагине до сих пор. Ещё раз спасибо, Саймон!
Я хотел бы проверить, что происходит с MemberPress, но это платный плагин. Судя по их документации, в настройках плагина есть параметр «URL перенаправления при выходе из MemberPress». Проблема может быть связана с этой настройкой.
Я пытаюсь найти способ выйти из Discourse с внешнего сайта. Я пытался найти документацию, и, похоже, решение заключается в отправке POST-запроса к API, как упоминается в этом посте.
Проблема в том, что я не совсем понимаю, как сделать такой запрос к API, и не могу понять, что делать дальше. Я скачал Postman и пытаюсь экспериментировать с ним, но у меня не получается. Я не уверен, как создать необходимый API-запрос и как реализовать его на внешнем сайте впоследствии.
Есть какие-нибудь предложения, как решить эту проблему?
Сайт работает на WordPress с плагином Memberpress и выступает провайдером единого входа (SSO) для моего форума на Discourse. После выхода пользователя из WordPress я могу перенаправить его на URL, который, как я хотел бы, использовался бы для одновременного выхода из Discourse. Или, возможно, я могу отправить API-запрос через PHP-функцию, которую можно добавить в файл functions.php?
Используете ли вы плагин WP Discourse для SSO? Если да, то выход из WordPress должен автоматически выполнять выход из Discourse, однако недавно поступило сообщение о том, что это не работает при использовании плагина Memberpress на WordPress: SSO: Unable to logout. Столкнулись ли вы с той же проблемой?
У меня возникли трудности с воспроизведением проблемы. Если бы я мог создать учётную запись на одном из ваших сайтов на WordPress, возможно, я бы смог понять, что происходит. Мне не нужен доступ администратора. Если это возможно, отправьте мне личное сообщение с деталями сайта.
@TGP Попробуйте изменить настройку Discourse «logout redirect» на https://www.thegearheadproject.com/?request=logout. Похоже, что запросы без www перенаправляются на URL с www, но при этом параметр запроса request=logout не сохраняется в перенаправлении.
Это может не решить проблему, но стоит исключить её как возможную причину.
Похоже, что проблемы с выходом из системы на этих сайтах не связаны между собой.
@robtech Когда я выхожу из вашей системы Discourse, я также выхожу из вашей системы WordPress, поэтому эта часть процесса выхода, похоже, работает на вашем сайте правильно. Проблема, которую я обнаружил, заключается в синхронизации выхода из WordPress с Discourse. Выход из вашей системы WordPress не приводит к выходу из вашей системы Discourse.
Пожалуйста, убедитесь, что ключ API и имя пользователя для публикации, которые вы установили на вкладке «Подключение WP Discourse», верны. Вам нужно использовать ключ API администратора и имя пользователя администратора. Самый простой вариант — использовать главный ключ API вашего сайта и в качестве имени пользователя для публикации указать «system». После сохранения настроек на этой странице должно появиться уведомление о том, что вы «подключены к Discourse». В этом разделе требуются учетные данные администратора, чтобы пользователи могли выходить из системы Discourse при выходе из системы WordPress.