Настроить Discourse для распознавания аккаунтов, верифицированных в WordPress (и WooCommerce), для SSO

Продолжаем обсуждение из темы Как отключить проверку email в Discourse?:

Discourse не распознаёт наши подтверждённые учётные записи. Вот контекст, описывающий текущую настройку нашего сайта:

Я использую плагин WP Discourse, где WordPress выступает в роли провайдера SSO.

Текущие настройки SSO <img>

В данный момент я использую WooCommerce (WC) для управления регистрацией новых пользователей, вот здесь: https://pickleballist.com/my-account

Я использую плагин под названием Booster for WC, который добавляет дополнительный функционал в WC, включая возможность требовать подтверждение email перед тем, как пользователь сможет получить доступ к своему аккаунту.

Настройки плагина <img>

Полученное письмо с подтверждением <img>

После того как пользователь нажимает ссылку в письме с активацией аккаунта, его перенаправляет на страницу /my-account/ в WordPress. Если человек пытается войти с учётными данными регистрации, не нажав на ссылку подтверждения, ему сообщают, что аккаунт сначала нужно подтвердить, и ему предоставляется ссылка для «повторной отправки письма с подтверждением».

Если вы посетите страницу «Пользователи» в консоли администратора, вы легко увидите, чьи аккаунты подтверждены, а какие — нет.

Учётные записи пользователей с отображением статуса подтверждения <img>

К сожалению, после того как пользователь подтвердил свой email и пытается зайти на наши форумы по адресу https://forums.pickleballist.com, он не входит автоматически. :disappointed_face: Но самое худшее то, что когда он нажимает кнопку «Войти» на форумах, его просят проверить почту и нажать ссылку в письме от Discourse «Подтвердите свою новую учётную запись».

Есть ли способ заставить Discourse проверять, кто фактически подтверждён, исходя из метаданных, которые поступают от WooCommerce?

Я предполагаю, что этот «Модуль проверки email» не взаимодействует с функцией wp_new_user_notification, иначе Discourse бы это увидел, верно? Можно ли настроить Discourse на поиск другого хука?

С нетерпением жду любых комментариев по этому вопросу!

@simon Я только что заметил ваш комментарий здесь:

Будет ли использование этого фрагмента кода :up_arrow:︎ решением для того, чего я пытаюсь добиться?

Пока плагин Booster for WC предотвращает вход пользователей в WordPress до подтверждения их адреса электронной почты, этот код можно использовать безопасно. При добавлении в вашу тему или плагин он позволит пользователям входить на ваш сайт Discourse без повторной проверки адреса электронной почты.

Это также возможно. Если вы знаете имя ключа метаданных, устанавливаемого WooCommerce, и ожидаемое возвращаемое значение для пользователей с подтверждённым адресом электронной почты, вы можете добавить проверку этого в функцию. Что-то вроде этого:

add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
    if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
        $require_activation = false;
    }

    return $require_activation;
}

Если у вас возникают проблемы с перенаправлением при входе через SSO с WooCommerce, возможно, вам потребуется установить этот плагин на ваш сайт: GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. Ознакомьтесь с файлом readme плагина для получения подробной информации о его функциях.

Этот код сработал! Теперь пользователям нужно только нажать на ссылку для подтверждения, сгенерированную WordPress. :folded_hands: Спасибо!

Я только что добавил его, но когда пользователь нажимает на ссылку для подтверждения, сгенерированную WordPress, его просто перенаправляет на страницу /my-account в WordPress после подтверждения. Он не возвращается обратно на форумы Discourse. Какое поведение здесь ожидается?

Я думаю, что ссылка подтверждения генерируется плагином Booster for WC. Если это так, то я это не тестировал. Проблема, которую должен решать плагин wp-discourse-woocommerce-support, заключается в переопределении перенаправления при входе, устанавливаемого Woocommerce при каждой попытке входа. Я не тестировал его с Woocommerce недавно, но в прошлом, когда Woocommerce был установлен на сайте, он не позволял неавторизованным пользователям перенаправляться на Discourse при попытке входа через WordPress.

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

Возможно, удастся заставить это работать со ссылкой подтверждения, на которую нажимают ваши пользователи, но я думаю, что это отдельная проблема.