tl;dr: Cuando un nuevo usuario de WordPress realiza un pedido o se registra, parece que sobrescribe o se conecta de alguna manera con usuarios existentes en Discourse. No estoy seguro de cómo solucionar esto.
Antecedentes:
Estamos utilizando el plugin wp-discourse para SSO, donde WordPress es el Proveedor de DiscourseConnect.
Lanzamos nuestra comunidad de Discourse, alojada en una instancia de Digital Ocean.
Cuando lanzamos la comunidad de Discourse y la conectamos a SSO con el plugin wp-discourse, estábamos alojando WordPress en AWS Lightsail, usando Plesk como nuestro panel de control.
Migramos a la hosting administrado de WordPress de Nexcess a principios de este año y el conector de Discourse pareció permanecer intacto.
No migramos a nuestros usuarios cuando nos mudamos a nuestra nueva instalación de WordPress. Fueron exportados y planeamos importarlos pronto.
Nuestro sitio de WordPress ha estado cerrado por un tiempo mientras realizábamos algunos ajustes importantes.
En los últimos meses, hemos tenido muchas personas realizando pedidos en WordPress (WooCommerce), y notamos algo peculiar… que cuando miras una cuenta de usuario en WordPress y miras el campo Nombre de usuario de Discourse, su nombre de usuario muestra el de usuarios existentes de Discourse. De alguna manera, nuestra conexión con Discourse parece estar rota. Un usuario se registró hoy y su Nombre de usuario de Discourse es tennisdpm, que como puedes ver es un usuario existente, que se registró en 2020.
Pronto migraremos (agregaremos) a todos los usuarios que tenían cuentas en nuestra antigua instancia de WordPress y los agregaremos a nuestra nueva instancia, pero al ver que parece haber algún conflicto con los usuarios existentes y los nuevos usuarios que se registran, queremos tener un plan de acción que evite conflictos continuos y sincronice a los usuarios existentes de WP (usando el correo electrónico como identificador único) con los usuarios de Discourse, y aprovisione nuevas cuentas de Discourse SSO, cuando lleguen nuevos usuarios de WP.
¡Agradeceríamos mucho ayuda y dirección sobre cómo proceder!
Configuración de SSO de conexión wp-discourse existente:
¡Oh, Dios mío! ¡Gracias por el aviso @omarfilip! ¿Hay alguna forma de restablecer esto o evitar que siga sucediendo? O tal vez podríamos/deberíamos desactivarlo hasta que terminemos de migrar a todos los usuarios anteriores.
Tenemos alrededor de 80 usuarios en WP en este momento que necesitan ser “desvinculados” de los usuarios actuales de Discourse con los que parecen estar asociados. Luego, también tenemos alrededor de 750 usuarios que necesitamos importar de nuestra instancia anterior y asegurarnos de que no tengan el mismo problema que tenemos ahora.
Esperaba que las cuentas en WP estuvieran vinculadas con la cuenta de Discourse basándose en la dirección de correo electrónico como identificador único… no en IDs externos/de usuario.
Hola @jord8on, la forma en que funciona la correspondencia en el extremo de Discourse es que primero intenta hacer coincidir el ID externo (que en tu caso ahora apunta a diferentes usuarios ya que has cambiado tu base de datos de Wordpress), y luego intenta hacer coincidir usando la dirección de correo electrónico. Hay algunas buenas razones para usar primero el ID. El correo electrónico no es un buen identificador descentralizado.
Así que lo que necesitas hacer es eliminar los registros de inicio de sesión único en Discourse creados cuando usabas tu antigua base de datos de Wordpress. Puedes usar una fecha y hora para identificarlos, por ejemplo, harías algo como esto en tu instancia de Discourse:
./launcher enter app
rails c
SingleSignOnRecord.where("created_at < ?", 1.month.ago) // comprueba si esto coincide con tus expectativas
SingleSignOnRecord.where("created_at < ?", 1.month.ago).delete_all
Los usuarios antiguos importados a la nueva base de datos se corresponderán en función del correo electrónico con sus cuentas existentes de Discourse (ya que su nuevo ID de Wordpress no coincidirá con ningún registro de SSO).
También eliminaría todos los datos de discourse_username en Wordpress y dejaría que se resincronicen automáticamente a través del webhook de usuario. Necesitarás ejecutar esto (quizás usando WP CLI), que elimina todas las entradas para el campo meta discourse_username.
Para futuras personas que lean esto, si usas DiscourseConnect con una base de datos de Wordpress, luego te mueves a una base de datos de Wordpress completamente nueva sin una migración, tendrás este tipo de problema. Debes buscar ayuda antes de realizar este tipo de cambio.