Configurar inicio de sesión único (SSO) con WP Discourse y DiscourseConnect

El plugin WP Discourse te permite configurar DiscourseConnect en WordPress para que tus usuarios puedan usar su cuenta de WordPress para iniciar sesión en Discourse, o su cuenta de Discourse para iniciar sesión en WordPress. Antes de configurar DiscourseConnect, primero debes instalar el plugin WP Discourse en WordPress y conectarlo con tu instancia de Discourse. Si estás listo para comenzar, empieza viendo este breve video o sigue las instrucciones a continuación.

Siguiente paso

Una vez que hayas configurado DiscourseConnect, es posible que quieras consultar los siguientes temas:


Instrucciones

Establecer una clave secreta

Ya sea que estés configurando WP Discourse como proveedor o cliente de DiscourseConnect, necesitas establecer una clave secreta. Ve a la pestaña «Clave secreta de DiscourseConnect» e introduce una cadena de texto (se permiten números, letras y símbolos) de al menos 10 caracteres. Usa las mismas reglas que aplicarías para crear una contraseña segura. Asegúrate de guardarla cuando termines.

Luego, abre la configuración de tu sitio Discourse (en el panel de administración) y busca «discourse connect». Una de las opciones cerca de la parte superior será discourse connect secret. Pega allí la clave secreta que configuraste en WP Discourse y haz clic en el check verde.

Iniciar sesión en Discourse con WordPress (Proveedor de DiscourseConnect)

Asegúrate de que WP Discourse esté conectado a tu instancia de Discourse y de que la clave secreta esté configurada ( :point_up: ) antes de seguir estas instrucciones.

Para permitir que tus usuarios inicien sesión en Discourse usando sus credenciales de WordPress, debes configurar WP Discourse como proveedor de DiscourseConnect. Ve a la pestaña DiscourseConnect Provider en la configuración de WP Discourse, selecciona la casilla Enable DiscourseConnect Provider y guarda los cambios.

A continuación, ve a la configuración de tu sitio Discourse y escribe «discourse connect» en el cuadro de búsqueda para ver todas las opciones de DiscourseConnect. Primero, establece discourse connect url con la URL de tu sitio WordPress. El paso final es seleccionar enable discourse connect. Asegúrate de estar listo antes de activarlo, ya que una vez hecho, tus usuarios solo podrán iniciar sesión en Discourse mediante WordPress.

Una vez habilitado DiscourseConnect en Discourse, para verificar que está configurado correctamente, abre una ventana de incógnito en tu navegador. Mantén tu ventana normal (no incógnito) con una cuenta de administrador iniciada sesión (por si algo sale mal y necesitas revertir los ajustes). En la ventana de incógnito, notarás que el botón «Registrarse» de Discourse ya no aparece. Haz clic en el botón «Iniciar sesión». Deberías ver una pantalla de inicio de sesión de WordPress. Ingresa tus credenciales de WordPress para iniciar sesión. Luego deberías ser redirigido de nuevo a Discourse y haber iniciado sesión.

Si algo sale mal o notas que algo no está correcto, vuelve a tu ventana normal del navegador y desactiva enable discourse connect para permitir que tus usuarios inicien sesión en Discourse de forma habitual. Si por alguna razón ya no estás iniciada sesión en tu cuenta de administrador en la ventana normal, consulta la sección «Desactivar DiscourseConnect mediante la consola de Discourse» en la solución de problemas más abajo para recuperar el acceso a tu instancia de Discourse.

Verificación de correo electrónico

Discourse espera que todas las direcciones de correo electrónico de los usuarios estén verificadas, mientras que WordPress no obliga a los usuarios a verificar su correo. En una configuración predeterminada de WordPress, es bastante fácil verificar el correo de un usuario durante el proceso de registro, pero si un sitio utiliza un plugin que crea un formulario de registro en el frontend —por ejemplo, el formulario de registro que se puede añadir con WooCommerce— el plugin WP Discourse no puede verificar el correo del usuario.

Si los correos de los usuarios no se verifican en WordPress, antes de que un usuario de WordPress pueda iniciar sesión en el foro, deberá responder a una notificación de verificación de correo enviada por Discourse. El plugin cuenta con algunos filtros que pueden usarse para sobrescribir este comportamiento. Consulta el código, comenzando aquí, para más detalles.

Eliminar la bandera require_activation

Si estás seguro de que WordPress está autenticando las direcciones de correo electrónico, puedes indicarle a Discourse que no es necesario. Para eliminar completamente la bandera require_activation, agrega algo como esto en tu sitio WordPress (por ejemplo, en el archivo functions.php de tu tema):

// Reemplaza 'my_prefix' con el prefijo de tu sitio.

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification' );
function my_prefix_discourse_email_verification( $require_activation ) {
    return false;
}

Para eliminar la bandera require_activation para usuarios específicos, usa algo como esto:

// Reemplaza 'my_prefix' con el prefijo de tu sitio.

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification', 10, 2 );
function my_prefix_discourse_email_verification( $require_activation, $user_id ) {
    $user = get_userdata( $user_id );
    if ( /* alguna condición evaluada contra $user */ ) {

        return true;
    }

    return false;
}

Webhook de datos de usuario

Este webhook existe por razones históricas: ahora es posible completar automáticamente el campo Nombre de Discourse utilizando la opción del proveedor de DiscourseConnect «Crear o sincronizar usuarios de Discourse al iniciar sesión».

El webhook Update Userdata (en el panel de configuración de «Webhooks») puede usarse cuando WordPress es el proveedor de DiscourseConnect para tu instancia de Discourse. El webhook completa automáticamente el campo Nombre de Discourse del usuario en WordPress.

Crear un enlace de inicio de sesión de DiscourseConnect

Si tienes habilitada la opción de proveedor de DiscourseConnect, puedes añadir un enlace de inicio de sesión de DiscourseConnect a tu sitio WordPress creando un enlace con la siguiente estructura:

<a href="https://discourse.example.com/session/sso?return_path=/">Comunidad</a>

Establece el valor de return_path con la página de tu foro donde deseas que el usuario termine. Puedes añadir un enlace de inicio de sesión SSO a un menú de WordPress agregando una URL con esta estructura como un enlace personalizado en la sección Menús del panel de administración de WordPress.

Iniciar sesión en WordPress con Discourse (Cliente de DiscourseConnect)

Para habilitar que tu sitio funcione como cliente de DiscourseConnect para Discourse, haz clic en la pestaña DiscourseConnect Client. En esa página, selecciona las opciones Enable DiscourseConnect Client y Add Login Link.

Ahora ve a la página de administración/configuración de tu instancia de Discourse y busca «discourse connect» para ver todas las opciones de DiscourseConnect.

  • selecciona la configuración «enable discourse connect provider»
  • copia tu Clave secreta de DiscourseConnect desde WordPress al campo «secret» de la configuración «discourse connect provider secrets» de Discourse. En el campo «domain» de esa configuración, ingresa el dominio de tu sitio WordPress. Luego haz clic en el check verde para guardar los cambios.

Una vez completado, la configuración «discourse connect provider secrets» en Discourse debería verse así (con el dominio establecido en el de tu sitio WordPress):

Discourse ahora debería funcionar como proveedor de DiscourseConnect para tu sitio WordPress.

Abre tu sitio WordPress en una ventana de incógnito en tu navegador. Cuando vayas a la página de inicio de sesión, deberías ver un enlace «Iniciar sesión con Discourse» debajo del formulario de inicio de sesión. Haz clic en él y serás llevado al formulario de inicio de sesión de Discourse. Inicia sesión allí y serás redirigido de nuevo a la página de inicio de sesión de WordPress con un mensaje indicando que necesitas sincronizar tu cuenta con Discourse. Sigue las instrucciones del mensaje para vincular tus cuentas, y deberías poder iniciar sesión en tu sitio WordPress a través de Discourse.

Nota: este comportamiento solo afecta a usuarios que ya tienen cuentas tanto en WordPress como en Discourse. Las nuevas cuentas de WordPress creadas a través de DiscourseConnect podrán iniciar sesión libremente en WordPress la primera vez que hagan clic en el enlace «Iniciar sesión con Discourse». Para facilitar el inicio de sesión a través de Discourse a usuarios con cuentas existentes tanto en tu sitio WordPress como en tu foro de Discourse, selecciona la casilla Sync Existing Users by Email en la pestaña de opciones de DiscourseConnect Client.

Sincronizar el cierre de sesión de Discourse

Cuando DiscourseConnect está habilitado, el cierre de sesión de Discourse puede sincronizarse con tu sitio WordPress agregando la home_url de tu sitio con el parámetro de consulta request=logout a la configuración de sitio de Discourse logout redirect. Esta configuración se encuentra en la sección de configuración de Discourse en /admin/site_settings/category/users. Aquí tienes un ejemplo de URL de «logout redirect»:

http://ejemplo.com/?request=logout

Solución de problemas

Si tienes problemas al usar WordPress como proveedor de DiscourseConnect para tu foro, lo primero que debes verificar es:

  • que las claves secretas de DiscourseConnect establecidas en WordPress y Discourse sean idénticas
  • que hayas seleccionado Enable DiscourseConnect Provider en tu sitio WordPress
  • que hayas ingresado la discourse connect url correcta en Discourse.

«Error de inicio de sesión» al usar DiscourseConnect

Si los usuarios reciben un mensaje de «Error de inicio de sesión» al intentar iniciar sesión en Discourse, consulta:

Debug and fixing common DiscourseConnect issues.

Desactivar DiscourseConnect

Si DiscourseConnect no funciona para ti, puedes desactivarlo deshabilitando la configuración de sitio enable discourse connect. Si no estás iniciada sesión en ninguna cuenta de administrador para desactivarlo, no te preocupes; hay varias formas de volver a entrar para desactivarlo.

Iniciar sesión mediante /users/admin-login

Abre una nueva ventana del navegador e ingresa la URL de tu foro en la barra de direcciones seguida de /users/admin-login, por ejemplo:

https://comunidad.misitio.com/users/admin-login

Deberías ver un campo que te pide tu correo de administrador. Después de enviar tu correo, recibirás un mensaje con un enlace que te permitirá iniciar sesión directamente en tu cuenta de administrador. Luego puedes ir a la configuración de tu sitio y desactivar enable discourse connect para deshabilitar DiscourseConnect.

Si esto no funciona por alguna razón, no te preocupes; aún puedes desactivar DiscourseConnect desde la consola de tu servidor (:point_down:)

Desactivar DiscourseConnect mediante la consola del servidor

Si no sabes qué es la consola del servidor o no tienes acceso a ella, contacta a tu proveedor de hosting para obtener ayuda. Después de conectarte por SSH a tu servidor, los comandos que debes ejecutar son los siguientes:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.enable_discourse_connect=false
exit
exit
11 Me gusta

¿Qué pasa si no tengo esas opciones en mi Discourse? :confused:

Hola @LosHunterros, ¡bienvenido a Meta!

Discourse Connect no está incluido en el plan de alojamiento básico
Screenshot_20240507_204846_Chrome

4 Me gusta

Gracias por tu respuesta

1 me gusta

Ahora necesito un nivel 101. O un simple sí o no.

Necesito un acceso fácil desde WordPress a mi foro para esos clientes. Como han creado una cuenta en WordPress, la usaría como proveedor.

Pero ahora tengo problemas con la IA de Discourse. Entendí que DiscourseConnect secuestrará todos los demás inicios de sesión, como Google, Microsoft y locales. Pero la IA está muy segura de que eso no es cierto, si configuro discourse connect allowed redirect domains.

Bueno, lo hice. Y todavía se redirige a WordPress sin ninguna otra opción de inicio de sesión.

Entonces, ¿he perdido dos horas de mi vida por una alucinación de una IA, o he hecho algo mal? Porque si tenía razón desde el principio y DiscourseConnect no permite otros inicios de sesión, lo quitaré de inmediato. Vivir sin el inicio de sesión de Google no es una opción en este rincón de Europa.

Tu pensamiento inicial fue correcto. La IA está equivocada: Ver más.

Desafortunadamente, sí.

1 me gusta

He seguido la guía de configuración hasta el punto en que el SSO debería funcionar. Cuando visito mi sitio de Discourse en una ventana de incógnito, soy redirigido inmediatamente a la página principal de mi WordPress con una larga cadena de consulta en la URL y sin opciones de inicio de sesión visibles.

¿Es este el comportamiento esperado en esta etapa?
¿Necesito ahora simplemente terminar de construir el lado de WordPress (inicio de sesión/registro, etc.), o he configurado algo mal?

Hola Mike, bienvenido. Deberías ser dirigido a la página de inicio de sesión estándar de Wordpress. Lo primero que se me ocurre es que tu tema (o un complemento) está proporcionando una página de inicio de sesión personalizada. ¿Cómo se ve normalmente tu página de inicio de sesión?

Hola Angus, ¡gracias! :slight_smile:

Esta es una instalación nueva de WordPress y Discourse, con el tema Twenty Twenty-Five activo. Seguí tus instrucciones en video paso a paso, pero cuando accedo a Discourse en una ventana de incógnito, redirige al sitio de WordPress y aterriza en la página de inicio del tema, no en una pantalla de inicio de sesión.

El sitio de WordPress está actualmente detrás de privacidad de directorio ya que está en un entorno de desarrollo; ¿podría eso estar afectando la redirección a la página de inicio de sesión normal?

Hola Mike, aquí tienes un pequeño video mío que acabo de grabar mostrando una instalación funcional con el código actual.

Simplemente compara tu configuración con lo que muestro en el video y, si estás seguro de que lo has configurado igual y todavía no funciona, pasaremos por un proceso de eliminación para ver si podemos determinar por qué.

1 me gusta

Hola Angis,

¡Muchas gracias por hacer ese video, excelente apoyo!

He proporcionado capturas de pantalla de cada sección (con información sensible difuminada)

image

image

image

En la anterior, esto no estaba seleccionado en realidad (ups), pero cuando visito el foro en un navegador de incógnito, ahora redirige automáticamente a /wp-login.php; no se me muestra el foro ni el botón de inicio de sesión como a ti.

image

No me molesta demasiado que vaya directamente a la página de inicio de sesión de wp ahora, ¡pero tener acceso de visualización directa al foro siempre es una ventaja!

@angus Lo he descubierto… Durante el “qué estoy haciendo” inicial, bloqueé la comunidad con esto;

image

Disculpas por ser un fastidio, es el modo de inicio :dashing_away:.

Gracias de nuevo por el increíble apoyo, seguro que volveré.

2 Me gusta

¡Me alegro de que lo hayas descubierto!

Hola Angus, me pregunto si puedes ayudarme con este problema que estoy teniendo, no he recibido ninguna respuesta a mi tema:

Básicamente, si anonimizo a un usuario, el complemento SSO simplemente le crea una nueva cuenta. ¿Hay alguna forma de deshabilitar a los usuarios individualmente para evitar que se creen nuevas cuentas para ellos, y puede sincronizarse automáticamente cuando prohíbo o anonimizo a alguien?

Quizás anonimizar al usuario y luego hacer que su dirección de correo electrónico sea la del SSO. O hacer que WordPress deniegue al usuario (esta parece ser la solución real: WordPress debería denegar al usuario).

¿Cómo hago para que WordPress impida que el usuario inicie sesión a través de SSO? Creo que esa es la solución.

Esa es una pregunta de WordPress. :wink:

Busqué en internet y parece que puedes cambiar su rol a “ningún rol en este sitio”.

Ah, lo que quise decir es que quiero que el usuario pueda seguir usando el sitio web pero no pueda crear una cuenta en el foro.

Nuestro foro está separado del sitio web, por lo que algunas personas que tienen prohibido el acceso a la comunidad por ser disruptivas aún deberían poder usar el sitio web, que es una herramienta SaaS (Software como Servicio).

Entonces creo que necesitarás suspenderlos en Discourse. Si necesitas anonimizar su contenido, tendrás que hacerlo y luego crear la cuenta que está suspendida.

Hola @Shauny He respondido a tu publicación de soporte original:

1 me gusta