Estamos usando OpenID para iniciar sesión, y parece que esa opción solo está disponible cuando se usa DiscourseConnect. ¿Hay otra manera? Rellenarlos manualmente es bastante molesto.
Sí permitimos que los usuarios editen su dirección de correo electrónico (distinta del SSO) en los sitios de Discourse, pero el ID de usuario garantizado es el mismo.
Mi respuesta inicial (las preguntas siguen pendientes)
Oh, lo siento, estaba seguro de que ya había respondido a eso, pero supongo que… ¿no lo hice? ¡Quizás solo lo estaba pensando! De todos modos:
El correo electrónico se sincroniza inicialmente desde el SSO tanto para WordPress como para Discourse. Sin embargo, debido a la demanda popular, permitimos que las personas cambien ese correo electrónico en Discourse. (Resulta que es frecuente querer que las notificaciones de Discourse vayan a un lugar que no sea el correo electrónico asociado directamente con el inicio de sesión). También es posible cambiar la dirección de correo electrónico en WordPress, pero no conozco a nadie que lo haga, o incluso si el correo electrónico saliente en esa instancia funciona.
Por “ID de usuario”, me refería a “nombre de usuario”. El nombre de usuario siempre[1] se toma del SSO tanto para Discourse como para WordPress y el usuario no puede cambiarlo en ningún caso. Por alguna razón desconocida para mí, pero que probablemente tenía sentido en ese momento, este es el nickname en nuestro lado del SSO; esto se mapea a oauth2 json username path.
En realidad, resulta que hay pocas cuentas como la mía que se configuraron antes de tener el SSO, y están mal: soy “Matthew Miller” en lugar de mattdm. Pero podríamos solucionar eso. ↩︎
Habría un subconjunto de sus usuarios con diferentes correos electrónicos en WordPress y Discourse.
Su nombre de usuario está garantizado que sea el mismo, ya que lo proporciona su proveedor de identidad tanto para WordPress como para Discourse.
Si desacopláramos el webhook de usuario de WP Discourse de la funcionalidad de DiscourseConnect (posible), entonces la coincidencia de usuarios se realizaría en función del correo electrónico, no del nombre de usuario. Su situación es algo específica de su configuración de identidad.
Creo que este caso se maneja mejor a través de código personalizado en su WordPress. Lo que desea es algo como esto:
Básicamente, simplemente asigne el campo meta discourse_username como el nombre de usuario de WP después del inicio de sesión, ya que se garantiza que serán los mismos. Tenga en cuenta que “user_login” es lo que a veces se llama “username” en el código de WordPress.
En algún momento, cambiamos para que las direcciones de correo electrónico se sincronicen forzosamente desde nuestro SSO (oauth2). Por lo tanto, deberíamos poder hacer coincidir de esa manera. (E incluso si por alguna razón hay una discrepancia, no debería haber un caso en el que un correo electrónico pertenezca a alguien más, por lo que en el peor de los casos simplemente fallaría, ¿verdad?)
¿Hay alguna posibilidad de que el webhook de usuario de WP Discourse simplemente funcione?
Si no, … No soy un experto en WP, y nuestro WP está alojado, así que no estoy seguro de que tengamos una opción fácil para personalizar el plugin.
Solo una nota: actualmente funciona. Estás pidiendo una nueva función
Además, estás pidiendo una nueva función que debe considerarse con mucho cuidado. Sé que dije que era posible hace unos años, sin embargo, actualmente soy un poco reacio a hacer esto como una función principal del plugin, ya que tal función tendría que asumir que las direcciones de correo electrónico están debidamente validadas en WordPress, lo que no es necesariamente una suposición segura.
Eso (validación de correo electrónico de WordPress) es responsabilidad del administrador del sitio, sin embargo, un principio del desarrollo de código abierto es evitar crear algo que cause malos resultados en un subconjunto (incluso un pequeño subconjunto) de casos, asumiendo que no tienes control sobre el entorno. Este problema todavía existe, pero se mitiga, cuando se limita solo a DiscourseConnect.
Lo consideraré más detenidamente y te responderé más adelante esta semana.
Si la coincidencia de correo electrónico es demasiado complicada, siento que “los nombres de usuario de Discourse siempre coinciden con WordPress (y viceversa)” no puede ser tan poco común.
Incluso si alguien no tiene un sistema SSO que asume un nombre de usuario único, seguramente debe haber muchos sitios más pequeños con, digamos, docenas de usuarios de WordPress donde esto es cierto por convención.
Existe una especie de solución existente para esto. Discourse se puede configurar para que sea el proveedor de DiscourseConnect para WordPress (lo opuesto a la configuración habitual). Es fácil de configurar. Cuando está habilitado, hay una configuración opcional que permite sincronizar las cuentas de WordPress/Discourse según la dirección de correo electrónico del usuario.
Incluso hay un enlace agregado a la página de perfil del usuario:
(edición: ¿se puede subtitular una imagen sin IA?)
Probándolo ahora, al hacer clic en el enlace de la página de perfil no se rellena el campo Nombre de usuario de Discourse. Debería hacerlo. Al hacer clic en el enlace “Iniciar sesión con Discourse” que se puede agregar a la página de inicio de sesión, sí se actualiza automáticamente el campo Nombre de usuario de Discourse.
Creo que el propósito de sincronizar cuentas es actualizar el campo Nombre de usuario de Discourse de forma segura, por lo que probablemente valga la pena investigar qué está sucediendo con esto. También parece que hay un problema por el cual se permite que las cuentas que tienen una dirección de correo electrónico “no verificada” en WordPress sincronicen sus cuentas con Discourse. Eso probablemente no debería permitirse por defecto.
Para tu caso, es posible que no quieras permitir que los usuarios inicien sesión en WordPress a través de Discourse. Debería ser posible simplemente usar el enlace en la página de perfil para permitir que los usuarios sincronicen sus cuentas para que su campo de nombre de usuario de Discourse se rellene automáticamente. No deberías tener que habilitar el inicio de sesión en WordPress a través de Discourse para que esto funcione.
Una posible desventaja de este enfoque es que los usuarios tendrán que iniciarlo. No proporcionaría un botón que los administradores pudieran hacer clic para obtener el nombre de usuario de Discourse de un usuario.
Eso parece una tontería. Tenemos un SSO centralizado. No deberíamos tener que configurar algunos de nuestros servicios para usar otros servicios aleatorios como proveedor de autenticación solo para que funcionen juntos. Eso es un camino hacia la locura.
No te dejes engañar por el nombre (DiscourseConnect). Si la función que describí estuviera funcionando como debería, solo sería una forma para que un usuario de WordPress confirmara que tenía una cuenta de Discourse con una dirección de correo electrónico coincidente y que su nombre de usuario de Discourse se completara automáticamente en WordPress. No afectaría el sistema de autenticación de tu sitio.
Nunca habrá un mecanismo de identidad de coincidencia de nombre de usuario de Wordpress a nombre de usuario de Discourse en el plugin principal, ni siquiera detrás de una configuración. La única posibilidad en este contexto es la coincidencia de correo electrónico. He decidido añadir la coincidencia de correo electrónico como mecanismo de reserva al webhook de usuario. Estará en la próxima versión, que llegará en unas pocas semanas.
Para cerrar el ciclo, la última versión del plugin 2.5.4 incluyó varias actualizaciones para Webhooks, incluida la eliminación del requisito de DiscourseConnect para la configuración “Coincidir usuarios por correo electrónico”. Ver más