SSO: Не удалось выйти из системы

Мне бы пригодился совет. :slight_smile:

У нас WP выступает провайдером SSO (мы управляем доступом к Discourse и контенту LMS с помощью MemberPress на WP). Регистрация и вход новых пользователей работают безупречно, но выйти из системы у меня никак не получается.

Я добавил редирект с ?request=logout, но стоит только обновить страницу после выхода, как я снова оказываюсь в системе.

Сначала я подумал, что проблема может быть в том, что WP открыт в другой вкладке браузера, но поведение сохраняется даже после выхода из WP и закрытия вкладки.

Кажется, мы очень близки к решению. Надеюсь, кто-нибудь захочет поделиться советами по устранению неполадок, чтобы мы могли наконец закрыть этот вопрос.

Спасибо.

Вот небольшой гиф, демонстрирующий (2) попытки выхода подряд.

А вот скриншоты моих настроек SSO в WP:

А в Discourse:

Похоже, у вас всё настроено правильно. Это обычный сайт WordPress или часть мультисайтовой установки? Возможно, возникла проблема с синхронизацией выхода из системы для сайтов, отличных от основного в сети.

Судя по вашей записи экрана, ваш сайт Discourse настроен на требование входа. Происходит следующее: Discourse перенаправляет вас на сайт WordPress с запросом SSO, а затем автоматически выполняет вход, поскольку вы всё ещё авторизованы в WordPress. Ожидаемое поведение — вы должны оказаться на странице входа в WordPress как неавторизованный пользователь.

Синхронизация выхода из системы с Discourse зависит от хука WordPress clear_auth_cookie. Возможно, другой плагин на вашем сайте мешает его работе.

Спасибо, Саймон. Это один сайт на WordPress, и использование куки-файла кажется правдоподобным. Тогда я займусь этим вопросом.

Оцениваю ваш совет!

brian driggs //// tgp

Если у вас есть тестовый сайт, попробуйте отключить все плагины, кроме WP Discourse, и посмотрите, сохранится ли проблема. Если у вас нет тестового сайта, вы можете попробовать отключить плагины для сессии вашего пользователя с помощью плагина Health Check. Подробная информация о том, как использовать этот плагин для отключения плагинов на время сессии, доступна здесь: Troubleshooting using the Health Check – Make WordPress Support.

Бум. У меня нет dev-сайта, но плагин проверки работоспособности сработал идеально — даже с первой попытки. Похоже, мне предстоит погрузиться в MemberPress и auth_cookie. Спасибо, Саймон.

Вот шаги, которые я предпринял, на случай если кому-то другому они понадобятся:

  1. Установил плагин Health Check.
    – Перевёл сайт в режим устранения неполадок.
    – Включил плагин WP-Discourse.
  2. Открыл сайт Discourse.
    – Выйдя из системы.
    – Был перенаправлен на страницу входа в WP (форма входа отсутствовала).
    – Не смог снова войти в Discourse вообще. (Желаемое поведение.)
  3. Включил MemberPress.
    – (Я понял, что страница входа использует поля логина/пароля, сгенерированные MemberPress.)
    – Форма входа снова появилась.
  4. Открыл сайт Discourse, уже был в системе.
  5. Попытался выйти, был перенаправлен по кругу обратно на 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. Столкнулись ли вы с той же проблемой?

Да, я использую этот плагин, и, похоже, проблема та же.

Отлично! Я постараюсь исправить это завтра.

Потому что ты тот самый. Спасибо, Саймон. :slight_smile:

Это было бы очень полезно! Если вам понадобится от меня дополнительная информация, просто дайте знать. Спасибо!

У меня возникли трудности с воспроизведением проблемы. Если бы я мог создать учётную запись на одном из ваших сайтов на WordPress, возможно, я бы смог понять, что происходит. Мне не нужен доступ администратора. Если это возможно, отправьте мне личное сообщение с деталями сайта.

@simon, только что оформил для тебя членство. Тебе должно прийти письмо с инструкциями по установке пароля. Дай знать, если что. Заранее спасибо.

Я также создал аккаунт на своём сайте и отправил вам детали в личные сообщения.

@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.

Дайте знать, если это не решит проблему.