У меня есть клиент с сайтом на WordPress, который управляет подписками и форумом, подключенным через wp-discourse. Всё работает отлично.
Однако теперь он хочет добавить дополнительные сайты Discourse, которые будут аутентифицироваться через единый сайт WordPress. Я попытался скопировать настройку с первого сайта Discourse на второй, но WordPress перенаправляет на первый сайт Discourse. Затем я подумал, что, возможно, можно сделать первый сайт Discourse сервером discourse_connect для второго, но это тоже не сработало (он также перенаправляет на первый сайт Discourse, и на втором сайте вход не выполняется).
Существует ли способ настроить единый сайт WordPress, который обеспечивает аутентификацию для нескольких сайтов Discourse?
Если вы планируете использовать единый вход для более чем двух платформ, то наиболее правильным решением будет использование keycloak.
Этот подход хорош тем, что нам не нужно думать о сервере единого входа, а также упрощается вход через социальные сети (и не только).
Вы можете добавлять и удалять любые сайты, не теряя пользователей.
Плагин WP Discourse не предназначен для работы в таком сценарии, но это должно быть возможно.
Я бы начал с добавления параметра URL site в настройку discourse_connect_url для Discourse. В WordPress используйте параметр site, чтобы указать правильный сайт Discourse для перенаправления здесь:
В идеале вышеуказанные изменения можно было бы реализовать с помощью хуков action и filter в WordPress. Похоже, что для этого потребуется добавить хуки непосредственно в код.
Я исхожу из того, что спецификация этого решения не включает публикацию постов из WordPress на несколько сайтов Discourse. Если это так, то необходимые изменения будут немного более сложными.
Дам знать, если вспомню какие-либо другие проблемы.
Редактирование: нужно подумать о том, как идентификатор пользователя Discourse используется в WordPress, чтобы убедиться, что не возникнет конфликтов между несколькими сайтами — один пользователь в WordPress потенциально может иметь учётные записи на нескольких сайтах WordPress. У них будет разный идентификатор пользователя Discourse на каждом сайте.
Редактирование: самая большая проблема, которую я вижу, возникает, если в настройках сайтов WordPress включена опция «Создавать или синхронизировать пользователей Discourse при входе». При этом выполняется вызов API к маршруту sync_sso в Discourse. Вам потребуется способ определить, на какой сайт Discourse следует выполнить синхронизацию или создать пользователя. Также вам понадобится ключ API Discourse для каждого сайта. Это кажется выполнимым, но добавит определённой сложности.
Звучит как что-то возможное. Да, его не интересует публикация, только аутентификация и, полагаю, синхронизация групп из WooCommerce или аналогичных систем.
Судя по всему, имеется в виду изменение членства пользователя в группах на конкретном сайте Discourse при совершении им покупки на сайте WordPress. Это выполнимо, но лучше всего реализовать через API-запрос к маршруту sync_sso. Плагин WP Discourse содержит функции, которые можно использовать для этого, однако они применяют URL сайта Discourse и API-ключ, указанные на страницах настроек плагина: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. Возможно, в плагин можно добавить фильтры для этих параметров, чтобы их можно было устанавливать условно.
Пока это всё ещё на стадии исследования, поэтому у меня нет конкретного бюджета. Однако я могу оказать помощь в разработке и, возможно, предоставить небольшое финансирование. Если ваш клиент тоже готов внести свой вклад, то, возможно, мы сможем объединить наши ресурсы.