Добавить ссылки в Discourse, позволяющие пользователям аутентифицироваться через SSO или напрямую получать доступ к закрытым группам, если они уже вошли в систему

У меня есть сайт на WordPress, который выступает провайдером единого входа (SSO) для Discourse с использованием плагина WPDiscourse. Форум является публичным, но в нём есть некоторые закрытые группы.

Когда я хочу добавить кнопки, которые ведут пользователей с моего сайта на WordPress в закрытую группу на Discourse, я использую URL SSO, как указано здесь, чтобы пользователи не попадали на страницу «Ой! Страница не найдена или является закрытой».

Однако, когда пользователи уже прошли аутентификацию через SSO в Discourse и возвращаются, нажимая на те же кнопки, их снова перекидывает на страницу входа, даже если они отмечали галочку «Запомнить меня» при входе. В идеале они должны иметь возможность свободно переходить в закрытые группы после аутентификации через SSO в Discourse.

Есть ли лучший способ настроить это?
Я подумал о добавлении кода на страницу входа WordPress для проверки, авторизован ли пользователь уже в Discourse, и в случае успеха перенаправлять его на страницу, указанную в аргументе «return_path» в URL. Является ли это рабочим решением? Если да, какие функции или вызовы API можно использовать для этого?

Спасибо!

Если пользователи уже вошли в ваш сайт WordPress, этого происходить не должно. Можете ли вы уточнить, входят ли в систему WordPress пользователи, с которыми это происходит? Если они вошли в систему, они должны быть автоматически перенаправлены на URL-адрес Discourse, который вы указали в аргументе return_path.

Привет @rodrigo.braga :slight_smile:

Я тоже немного запутался. Не могли бы вы подтвердить следующее:

Настройка

Wordpress настроен как провайдер DiscourseConnect для Discourse в соответствии с инструкциями здесь

Сценарий 1

  1. Пользователь находится на вашем сайте Wordpress и не авторизован в Wordpress.
  2. Пользователь переходит по ссылке на Wordpress в формате https://discourse.example.com/session/sso?return_path=/g/private_group.
  3. Пользователю предлагается войти в систему в Wordpress.
  4. Пользователь входит в систему в Wordpress.
  5. Пользователь перенаправляется на https://discourse.example.com/g/private_group.
  6. Пользователь видит private_group, поскольку теперь он авторизован в Discourse через DiscourseConnect и является участником private_group.

Так ли это в настоящее время?

Сценарий 2

  1. Пользователь находится на вашем сайте Wordpress и авторизован в Wordpress.
  2. Пользователь переходит по ссылке на Wordpress в формате https://discourse.example.com/session/sso?return_path=/g/private_group.
  3. Пользователю предлагается войти в систему в Wordpress.

Так ли это в настоящее время?

Спасибо, Саймон. Да, пользователь авторизован в WordPress.

Странность в моём случае заключается в том, что у меня есть основной сайт на WordPress (WPSite1), который выступает провайдером DiscourseConnect для Discourse с помощью плагина WP Discourse.

Затем у меня есть второй сайт на WordPress (WPSite2), который синхронизирует базу данных пользователей с WPSite1 с помощью плагина WP Remote User Synch.

Непонятно, почему это должно влиять на ожидаемое поведение, о котором вы упоминали, потому что когда я вхожу в систему на WPSite2, а затем перехожу на WPSite1, я уже авторизован и на WPSite1.

Однако происходит следующее: даже после входа в систему на WPSite1, который является провайдером DiscourseConnect, и при переходе по ссылке, например https://discourse.example.com/session/sso?return_path=/g/private_group, меня перекидывает на форму входа SSO в WordPress.

Спасибо, Ангус.

Сработал сценарий 2.
Я изучу инструкции, но, полагаю, всё настроено верно, так как вход через SSO работает. Проблема в том, что страница входа не распознаёт, что пользователь уже аутентифицирован.

Привет @simon и @angus, ещё раз спасибо, я нашёл, в чём была проблема.

При проверке конфигурации DiscourseConnect я заметил, что URL DiscourseConnect был установлен как https://mydomain.org, а в рекомендациях плагина Discourse WP для WordPress указывалось использовать https://www.mydomain.org… Когда я обновил адрес, добавив www, всё заработало как ожидалось.

Спасибо.