Поставщик SSO для WordPress — пустая страница

Я пробую использовать WordPress в качестве провайдера SSO для Discourse через плагин. Когда я нажимаю «Войти» на сайте форума, меня перенаправляет на мой веб-сайт с параметром URL SSO, но страница отображается пустой. Должен ли плагин считывать этот параметр URL и выполнять какие-то действия, которые сейчас не работают? Нужно ли мне перенаправлять запрос на определённый путь на сайте? Я просто не уверен, какое поведение ожидается, поэтому не знаю, как приступить к устранению неполадок. В логах ошибок сервера я ничего не вижу.

Использует ли ваш сайт страницу входа по умолчанию WordPress по адресу /login.php? Если нет, возможно, вам потребуется добавить путь к опции «Путь к вашей странице входа» (находится на вкладке «Поставщик SSO WP Discourse».)

Установлен ли на вашем сайте Woocommerce?

По умолчанию не используется, хотя я указал это в поле. Всё равно ничего не получается — просто пустая страница.

И нет, WooCommerce не используется.

Похоже, я неправильно понял, как это должно работать, или мне нужно внести дополнительные изменения. В ходе тестирования я обнаружил, что если я уже авторизован на сайте, то всё работает как ожидается. Однако я ожидал, что если я ещё не авторизован, система запустит процесс входа, но этого, похоже, не происходит. Исходя из этого, у меня есть несколько уточняющих вопросов:

  1. Должен ли редирект для входа из Discourse направлять пользователя на /?sso=abcd1235… на моём сайте или на /sign-in/?sso=abcd1235… (включая мой пользовательский путь входа)? Сейчас используется /.
  2. Ожидается ли, что мой пользовательский код входа сохранит параметры URL SSO и включит их в редирект обратно на мой сайт после авторизации, чтобы затем выполнить соединение SSO?

И я только что понял, что для имени пользователя Discourse используется имя пользователя WordPress. В нашем случае нужно использовать никнейм из WordPress, так как имя пользователя представляет собой хеш-значение, основанное на провайдере аутентификации третьей стороны. Так что, возможно, это тупик.

Да. После нажатия кнопки «Войти» на Discourse пользователи будут перенаправлены на URL, который вы установили как sso url в настройках Discourse. Это должен быть основной URL вашего сайта.

Если вы еще не вошли в WordPress, код SSO перенаправит вас на URL входа вашего сайта. По умолчанию это /wp-login.php. Его можно изменить, настроив опцию «Путь к странице входа». После входа пользователи должны быть перенаправлены обратно на основной URL вашего сайта, при этом параметры запроса, переданные с Discourse, должны сохраниться.

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

Вы можете использовать фильтр wpdc_sso_params, чтобы переопределить имя пользователя, устанавливаемое плагином:

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    $params['username'] = $user->user_nicename;

    return $params;
}

Подробности о том, что происходит, можно найти по ссылке: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub.

Я только что посмотрел код плагина и увидел, где это можно изменить. Использование переопределения — гораздо лучший подход, спасибо! Я проверю свой код кастомного входа и посмотрю, где и как он может мешать процессу. Это очень помогло, спасибо ещё раз.