Tengo un cliente que tiene un sitio de WordPress que maneja suscripciones y un foro conectado con wp-discourse. Todo está bien.
Pero ahora quiere agregar sitios adicionales de Discourse que se autentiquen contra el único sitio de WordPress. Intenté copiar la configuración del primer sitio de Discourse al segundo, pero WordPress redirige al primer sitio de Discourse. Luego pensé que tal vez podría hacer que el primer sitio de Discourse sea un servidor discourse_connect para el segundo sitio, pero eso todavía no funciona (también redirige al primer sitio de Discourse y el segundo no inicia sesión).
¿Hay alguna manera de tener un único sitio de WordPress que proporcione autenticación para múltiples sitios de Discourse?
Si planeas usar inicio de sesión único para más de dos plataformas, entonces la solución más correcta es usar keycloak.
Este enfoque es bueno porque no tenemos que pensar en un servidor de inicio de sesión único y un inicio de sesión más simple a través de redes sociales (y no solo).
Puedes agregar y eliminar cualquier sitio sin perder al usuario.
El plugin WP Discourse no está configurado para manejar esto, pero debería ser posible.
Empezaría añadiendo un parámetro de URL site a la configuración discourse_connect_url de Discourse. En WordPress, usa el parámetro site para establecer el sitio de Discourse correcto al que redirigir aquí:
Idealmente, los cambios anteriores podrían lograrse con ganchos action y filter en WordPress. Parece que se necesitarían añadir ganchos al código para eso.
Asumo que la especificación de esto no implica publicar entradas de WordPress en varios sitios de Discourse. Si ese es el caso, los cambios requeridos serían un poco más complicados.
Te avisaré si se me ocurren otros problemas.
Editar: necesito pensar en cómo se utiliza el ID de usuario de Discourse en WordPress para asegurarme de que no haya conflictos entre varios sitios: un solo usuario en WordPress podría tener cuentas en varios sitios de WordPress. Tendrían un ID de usuario de Discourse diferente en cada sitio.
Editar: el mayor problema que veo es si la configuración “Crear o sincronizar usuarios de Discourse al iniciar sesión” está habilitada en los sitios de WordPress. Realiza una llamada a la API a la ruta sync_sso de Discourse. Necesitarías tener una forma de saber en qué sitio de Discourse sincronizar o crear el usuario. También necesitarías tener una clave de API de Discourse para cada sitio. Esto parece factible, pero añadiría cierta complejidad.
Supongo que esto significa ajustar las membresías de grupo de un usuario en un sitio de Discourse en particular cuando realiza una compra en el sitio de WordPress. Eso parece factible, pero se haría mejor con una solicitud de API a la ruta sync_sso. El plugin WP Discourse tiene funciones que se pueden usar para esto, pero usan la URL y la Clave de API de Discourse que se configuran en las páginas de opciones del plugin: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. Tal vez el plugin podría agregar ganchos de filtro a esos parámetros para que puedan configurarse condicionalmente.
Todavía es exploratorio, así que no tengo un presupuesto como tal. Pero puedo proporcionar algo de asistencia de desarrollador y quizás un poco de financiación. Si su cliente también está dispuesto a colaborar, entonces quizás podamos juntar algo de financiación.