Hacer que Discourse reconozca cuentas verificadas en Wordpress (y WooCommerce) para SSO

Continuando la discusión desde Cómo desactivar la verificación de correo electrónico de Discourse?:

Discourse no está reconociendo nuestras cuentas verificadas. Aquí hay algo de contexto sobre la configuración actual de nuestro sitio:

Estoy usando el plugin WP Discourse con WordPress como proveedor de SSO

Configuración actual de SSO <img>

Actualmente estoy usando WooCommerce (WC) para gestionar los registros de nuevos usuarios, aquí: https://pickleballist.com/my-account

Estoy usando un plugin llamado Booster for WC, que agrega funcionalidad adicional a WC, incluida la capacidad de exigir la verificación por correo electrónico antes de que un usuario pueda acceder a su cuenta.

Opciones del plugin <img>

Correo de verificación recibido <img>

Después de que el usuario hace clic en el enlace del correo de activación de su cuenta, es redirigido a su página /my-account/ en WordPress. Si una persona intenta iniciar sesión con sus credenciales de registro sin hacer clic en el enlace de verificación, se le indica que su cuenta debe ser verificada primero y recibe un enlace para “reenviar el correo de verificación”.

Si visitan la página “Usuarios” en la consola de administración, pueden ver fácilmente qué cuentas han sido verificadas y cuáles no.

Cuentas de usuario con representación de verificación <img>

Desafortunadamente, después de que este usuario verifica su correo electrónico e intenta visitar nuestro foro en https://forums.pickleballist.com, no se inicia sesión automáticamente. :disappointed_face: Pero lo peor es que cuando hacen clic en el botón “Iniciar sesión” en el foro, se les exige que revisen su correo electrónico y hagan clic en el enlace del correo de Discourse “Confirma tu nueva cuenta”.

¿Existe alguna forma de que Discourse verifique quién está realmente verificado basándose en los metadatos que se reciben de WooCommerce?

Supongo que este “Módulo de verificación por correo electrónico” no está tocando wp_new_user_notification, de lo contrario Discourse lo vería, ¿verdad? ¿Podemos hacer que Discourse busque otro hook?

¡Esperamos cualquier insight al respecto!

@simon Acabo de ver tu comentario aquí:

¿Sería usar ese fragmento de código :up_arrow:︎ la solución a lo que estoy intentando lograr?

Mientras el complemento Booster for WC impida que los usuarios inicien sesión en WordPress antes de verificar su dirección de correo electrónico, ese código será seguro de usar. Al agregarlo a tu tema o a un complemento, permitirá que los usuarios inicien sesión en tu sitio Discourse sin necesidad de volver a verificar su dirección de correo electrónico.

Esto también sería posible. Si conoces el nombre de la clave de metadatos que establece WooCommerce y el valor de retorno esperado para los usuarios con direcciones de correo electrónico verificadas, podrías agregar una verificación de eso a la función. Algo así:

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;
}

Si estás experimentando problemas de redirección de inicio de sesión SSO con WooCommerce, es posible que necesites instalar este complemento en tu sitio: GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. Consulta el archivo readme del complemento para obtener detalles sobre lo que hace.

¡Ese código funcionó! Ahora los usuarios solo tienen que hacer clic en el enlace de verificación generado por WP. :folded_hands: ¡Gracias!

Acabo de agregarlo, pero cuando el usuario hace clic en el enlace de verificación generado por WP, simplemente lo lleva a su página /my-account en WP después de verificar. No lo devuelve a los foros de Discourse. ¿Cuál es el comportamiento esperado en este caso?

Creo que el enlace de verificación está siendo generado por el plugin Booster for WC. Si es así, entonces no es algo que haya probado. El problema que el plugin wp-discourse-woocommerce-support está diseñado para resolver es anular una redirección de inicio de sesión establecida por WooCommerce en cada intento de acceso. No he probado recientemente con WooCommerce, pero en el pasado, cuando WooCommerce estaba instalado en un sitio, impedía que los usuarios no registrados fueran redirigidos a Discourse cuando intentaban iniciar sesión a través de WordPress.

El comportamiento esperado es que cuando un usuario que no ha iniciado sesión en WordPress haga clic en el botón de inicio de sesión en Discourse, o en un enlace de inicio de sesión SSO generado debajo de una publicación que se haya publicado en Discourse, el usuario será llevado al proceso de inicio de sesión de WordPress y luego redirigido a la URL correcta de Discourse. Hágamelo saber si esto no funciona correctamente para los usuarios que han verificado su dirección de correo electrónico.

Es posible que se pueda lograr que esto funcione con el enlace de verificación en el que hacen clic sus usuarios, pero creo que ese es un problema separado.