Tengo Discourse Connect configurado con WP como la instancia principal de registro e inicio de sesión.
Tengo dos formularios de registro de usuarios con diferentes flujos:
Registro estándar desde la página de inicio (este es el antiguo y todavía crea un usuario en Discourse).
Registro de usuario utilizando un flujo de herramientas. (este crea el usuario de WP pero no crea un usuario en Discourse).
No veo ninguna configuración en el plugin de Discourse que sea específica para un formulario de registro. Cuando voy al usuario, no veo un nombre de usuario de Discourse en WP para el segundo formulario. Enlace
Tengo dos preguntas:
¿Qué podría estar pasando por alto? ¿Se requiere alguna configuración adicional para que funcione para el nuevo formulario?
¿Cómo puedo crear un usuario en Discourse y conectarlo a WordPress para los miembros que existen en WP?
Corrección: Tras un análisis más detallado, parece que algunos usuarios ni siquiera se crean en Discourse desde el primer formulario.
El usuario va al formulario y añade su nombre, correo electrónico y contraseña.
Luego, el usuario inicia sesión automáticamente.
Después, cuando el usuario hace clic en el enlace de la comunidad, inicia sesión automáticamente en Discourse (ya que el plugin Discourse Connect habrá hecho su trabajo de crear un nuevo usuario en Discourse).
Para el segundo formulario:
El usuario añade un nombre y un correo electrónico.
Le proporcionamos una contraseña temporal.
El resto del proceso es el mismo, es decir, el usuario inicia sesión automáticamente al registrarse.
Pero en este caso, el usuario no se crea en Discourse.
No veo ninguna configuración en Discourse Connect que se active al cambiar un formulario de registro. ¿Hay algún hook que deba activarse en el registro de usuarios en WP que no se active en el caso del segundo formulario?
De hecho, ¿qué hook en WordPress se utiliza para crear un usuario en Discourse? Debe haber una llamada a la API para activar la actividad en Discourse. ¿Podría ser que no se activara por alguna razón?
¿Qué sucede con estos usuarios cuando hacen clic en “Iniciar sesión” en Discourse? Describe exactamente qué sucede cuando lo intentan. Entiendo que el usuario no aparece en su panel de administración después de que se crea en Wordpress, pero esta es una pregunta ligeramente diferente.
Primer caso en el que el usuario está registrado en WP -
El usuario no tiene que hacer clic en iniciar sesión en Discourse y se inicia sesión automáticamente
al hacer clic en el siguiente enlace en WP -
Si solo uso el enlace - https://community.showprowess.com/ - para ir a Discourse desde WP, el usuario no inicia sesión y tengo que hacer clic en el botón Iniciar sesión en Discourse para iniciar sesión del usuario.
Una vez que el usuario inicia sesión, permanece conectado hasta que cierro sesión en WP.
Esto crea un problema porque si el usuario no hace clic en /session/sso?return_path=/ , el usuario no inicia sesión. Esto me impide dirigir al usuario a la página de mensajes privados desde WP a Discourse. (una funcionalidad que necesito como parte del producto)
Como este es el primer enlace en el que hago clic, el cuadro de mensaje no se abre. En cambio, inicio sesión en Discourse. Ahora tengo que volver y hacer clic de nuevo en el mismo enlace (enlace de mensaje) para que funcione.
Se ve así -
Esto es molesto para los usuarios.
Anteriormente, todo esto funcionaba bien, ya que el usuario iniciaba sesión automáticamente en Discourse y la URL https://community.showprowess.com me llevaba a una página de Discourse iniciada. Quizás el usuario inició sesión usando las cookies del navegador o algo así, pero eso ya no funciona.
Cuando el usuario no está registrado en Discourse
Esto está sucediendo en ambos formularios, es decir, en los nuevos y en los antiguos.
En este caso, volví a iniciar sesión y pasé por el proceso de incorporación y esta vez el usuario se creó en Discourse. Antes de eso, el usuario no existía en Discourse (verifiqué la lista de nuevos usuarios en el área de administración antes de volver a iniciar sesión).
Seguí los mismos pasos que los anteriores: hacer clic en la URL /sessions para iniciar sesión automáticamente en Discourse. Si hago clic solo en el dominio de la comunidad, no inicia sesión.
Desafortunadamente, no puedo reproducir el caso en el que el usuario no se crea al registrarse, pero se crea al iniciar sesión por primera vez. Esto no sucede en cada registro de nuevo usuario, lo cual es muy extraño.
Para ser honesto, estoy un poco confundido en cuanto a cómo esta descripción de su problema se relaciona con su descripción anterior de un problema causado por tener dos formularios de registro de WordPress diferentes. Pero creo que puedo ayudarlo aquí de todos modos.
Una cosa que hay que entender es que no hay forma (y nunca la ha habido) de iniciar sesión instantáneamente en dos servicios diferentes en dos dominios diferentes. Siempre que parezca que ha iniciado sesión en el servicio A en el dominio A y cuando va al servicio B en el dominio B, también ha iniciado sesión, lo que realmente ha sucedido es que ha iniciado sesión en el servicio B a través del servicio A solo una vez que visita el dominio B y se inicia un proceso de inicio de sesión, no antes.
Otra cosa que hay que entender es que, fuera del escenario específico que está describiendo donde desea redirigir a una persona a un lugar específico en la aplicación que requiere una sesión, a la mayoría de los usuarios no les importa, o no notan el hecho de que a veces necesitan hacer clic en “iniciar sesión” en el servicio B. En mi experiencia trabajando con clientes en soluciones de identidad, los administradores del sitio suelen ser mucho más sensibles a esto que sus usuarios.
La forma en que esto funciona no ha cambiado. Siempre que parezca que un usuario ha iniciado sesión “automáticamente”, lo que realmente sucede es que ha sido redirigido de regreso a WordPress y luego redirigido de regreso a Discourse una vez que su sesión en WordPress ha sido autenticada. Si ya ha iniciado sesión en WordPress, parecerá que ha iniciado sesión “automáticamente” en Discourse, ya que esta redirección ocurrirá sin que el usuario necesite hacer nada.
Una forma en que puede activar el inicio de sesión “automático” y redirigirlos a un lugar específico en Discourse después del inicio de sesión es utilizando la ruta que ya ha compartido.
https://community.showprowess.com/session/sso?return_path=[any path in Discourse]
Si el usuario ya ha iniciado sesión en WordPress, pero aún no ha iniciado sesión en Discourse cuando usa esta URL, esto es lo que sucederá:
Discourse inicia automáticamente el proceso de inicio de sesión de DiscourseConnect
El navegador del usuario se redirige a WordPress
El usuario ya ha iniciado sesión, por lo que el usuario es redirigido automáticamente de regreso a Discourse
Si había un valor return_path en la URL utilizada en 1, el usuario será redirigido allí
Desde la perspectiva del usuario, verá que su navegador se carga brevemente, pero efectivamente habrá iniciado sesión “automáticamente” en Discourse y será redirigido a una parte específica de la aplicación.
Tenga en cuenta que en realidad puede hacer que return_path sea cualquier URL, incluso un dominio separado, si establece la configuración del sitio discourse connect allows all return paths en true.
¡Gracias! Esto es útil para resolver el problema de iniciar sesión automáticamente al usuario de WP en Discourse. Puedo usar return_path para dirigir al usuario a cualquier página en Discourse. Esto resuelve el problema de dirigir al usuario a la página de mensajes.
Sin embargo, todavía no estoy seguro de por qué, en algunos casos, el usuario no se crea en Discourse cuando se crea en WordPress. ¿Sabes cuándo se crea realmente un usuario en Discourse desde SSO?
¿Es cuando se crea un usuario en WP?
¿Es cuando un nuevo usuario de WordPress intenta acceder a Discourse y luego se crea, inicia sesión y se dirige a Discourse?
¿Qué hook usamos en WP para crear un usuario en Discourse?
Estoy tratando de entender qué caso extremo no crearía un usuario en Discourse cuando se crea un usuario en WP.
Caso de uso práctico:
Doy la bienvenida a nuevos usuarios cada semana con un mensaje. La semana pasada se unieron 30 usuarios en WP y 16 se crearon en Discourse. Cuando quiero etiquetarlos en un mensaje de bienvenida, no puedo etiquetarlos a todos, lo cual me parece muy extraño.
Con la configuración predeterminada, los usuarios se crean en Discourse la primera vez que inician sesión en Discourse usando DiscourseConnect. Hasta ese momento, no existe ningún usuario en Discourse.
El plugin WP Discourse también tiene una configuración “Crear o Sincronizar Usuarios de Discourse al Iniciar Sesión” que, cuando está habilitada, creará un usuario a través de la API de Discourse después de que el usuario se registre en Wordpress. Esta configuración utiliza la acción de WordPress wp_login, por lo que su proceso de registro de usuario debe activar esa acción para que esta función funcione.
Tengo marcada la configuración “Crear o sincronizar usuarios de Discourse al iniciar sesión”. El usuario no se está creando en Discourse porque algunos usuarios se registran en WP pero no visitan la comunidad al iniciar sesión por primera vez. Podrían volver e iniciar sesión y luego hacer clic en la URL de la comunidad y entonces se creará el usuario.
El inicio de sesión automático actual después del registro en WP no utiliza WP_login
Preferiría crear el usuario en Discourse al registrarse en WP.
Tengo ganchos personalizados en el formulario de registro de usuarios que pueden ejecutar la API. ¿Hay algún código que pueda agregar al gancho personalizado para crear un usuario en Discourse a través de la API?
Esta es la parte que no sé cómo hacer, es decir, activar wp_login desde un gancho personalizado.
Te sugiero que leas sobre la acción. La documentación de WP es un mejor recurso que yo en esto. Desafortunadamente, no podré averiguar la mejor manera de integrar tu código de inicio de sesión personalizado de WP aquí. En cuanto al problema que tienes, creo que hemos llegado al fondo del asunto.