Corrupción de datos de usuario en la migración de phpBB3 a WP/Discourse

Ocasionalmente y aparentemente justo después de una importación reciente de datos de usuario de nuestro antiguo sitio basado en phpBB3, estamos viendo un problema donde algunos datos de usuario se corrompen con los datos de otro usuario durante la sincronización de WP a Discourse. No sucede a menudo y no se puede repetir a voluntad, lo que desafortunadamente ha llevado a nuestro equipo de desarrollo a descartarlo en gran medida como un problema.

En el primer caso, una de mis cuentas de usuario de prueba fue eliminada como parte de una importación reciente de datos, pero el avatar de ese usuario de prueba se asignó al perfil de otro usuario y me conecté como ese usuario una vez que se completó la importación.

En un segundo caso, registré un usuario de prueba en WP y, cuando ocurrió la sincronización con Discourse, este usuario de prueba tomó el nombre de usuario de un usuario existente en Discourse y algunos de sus datos de perfil y grupo personalizados. Ver captura de pantalla…

En ambos casos, usuarios duplicados en Discourse estuvieron involucrados en la corrupción de la cuenta del usuario de prueba. Por ejemplo, agmolnar y agmolnar1 y tbm960c y tbm960c1.

Tuvimos varios de estos usuarios duplicados que supongo que probablemente provinieron de usuarios anónimos en el archivo de datos importado de phpBB3.

¿Alguien ha visto algo similar antes o tiene alguna pista sobre cuál podría ser el problema aquí? ¿Valdría la pena que nuestro equipo limpie el archivo de importación de phpBB3 de usuarios anónimos antes de realizar una nueva importación?

Gracias por cualquier sugerencia.

Hola Ryan,

Quizás puedas echar un vistazo a estos archivos y ver si encuentras información útil:

También:

Y:

Quizás puedas modificar esta parte para no importar usuarios anónimos, o encontrar alguna pista que conduzca a tu extraño problema.

Gracias Coin-coin. Si eliminamos los usuarios anónimos del archivo de datos de usuarios antes de importar, supongo que todas las publicaciones anónimas se asignarán al usuario ‘system’ como ya lo están. ¿Hay alguna razón que no conozca para mantener a los usuarios anónimos de nuestra instancia phpBB en el archivo de importación?

Entiendo por esto y otros hilos como…

El problema para nosotros parece estar relacionado con los usuarios anónimos, que son esencialmente usuarios duplicados que no existen en WP, una importación nueva a WP que cambia la estructura de los IDs de usuario de WP pero no los IDs de Discourse al eliminar usuarios de prueba de WP recién creados, y el hecho de que Discourse intenta asociar a los usuarios primero por el ID externo de WP.

Cuando realizamos una importación nueva, elimina algunos usuarios de prueba de WP de la base de datos. Los IDs de usuario de un par de usuarios anónimos de phpBB que busqué parecen tener los IDs de usuario enteros más altos en Discourse (4505, 4506, etc.). Por lo tanto, parece que cuando ejecutamos una importación nueva y eliminamos cuentas de prueba en WP, un usuario recién creado en WP se sincroniza con el ID antiguo del usuario antiguo ahora inexistente.

Al forzar que los usuarios se emparejen por correo electrónico en lugar de por ID externo durante la importación nueva, como se describe en la publicación #5 vinculada anteriormente, deberíamos poder excluir la posibilidad de cualquier fusión no deseada de usuarios antiguos y nuevos.

¿Todo esto suena razonable?

Gracias

Un problema con esto es que se perderá la atribución de las publicaciones a usuarios únicos, por lo que será difícil seguir una conversación donde todas las publicaciones parecen provenir de un único usuario system; no podrás distinguir a los participantes individuales entre sí.

Exactamente; conceptualmente, podrías dejar las cosas como están y usar manualmente la interfaz del perfil de usuario del administrador para fusionar usuarios que deberían ser los mismos, O podrías simplemente enviar correos electrónicos como ID externo en lugar de como sugieres, lo que permitirá que los nuevos inicios de sesión se conecten a una cuenta existente con una dirección de correo electrónico coincidente.

Este último es claramente el camino de menor resistencia :+1:

@kiefferr Noté algunos detalles en las imágenes que incluiste y los eliminé en caso de que no tuvieras la intención de compartirlos. Siéntete libre de volver a subir las imágenes si es necesario. :slight_smile: :+1:

1 me gusta

¿Estás diciendo que ejecutas ambas comunidades, discourse y phpbb3, al mismo tiempo e importas periódicamente datos de phpbb3 de nuevo?

Eso es lo que parece en este momento, ya que el desarrollo de nuestro nuevo sitio WP/Discourse se alarga, pero no, Discourse todavía está en desarrollo. Estamos reemplazando un sitio personalizado que se construyó alrededor de phpbb3.

Hicimos una importación inicial y luego decidimos hacer otra importación de prueba antes de una importación final antes del cambio. Me alegro de haberlo hecho, porque no querría estar persiguiendo estos errores en un sitio en vivo.

1 me gusta

Hola chicos, tengo un seguimiento si fueran tan amables. Compartí los hallazgos anteriores con el equipo de desarrollo sobre la obligación de que los usuarios se emparejen por correo electrónico en lugar de identificadores externos durante la importación/migración final justo antes de que entremos en funcionamiento, así como la eliminación de registros SSO para que puedan propagarse limpiamente.

Pero ahora parecen pensar que hubo algo malo con los datos de exportación originales de phpBB3, a saber, que hay usuarios duplicados/anónimos en esos datos, así como algunos usuarios de phpBB sin correos electrónicos asociados. Todo lo siguiente parece algo que Discourse debería poder manejar en términos de importar datos de phpBB3. ¿Estoy equivocado? Especialmente en lo que respecta a cómo Discourse asigna nombres de usuario ficticios a los usuarios anónimos, este es un procedimiento operativo estándar.

Si necesitamos obtener datos más limpios de nuestra instalación actual de phpBB3, probablemente podamos hacerlo. Pero no parece que necesitemos o debamos modificar los datos de phpBB. Ese no fue realmente el problema.

Realizamos una nueva instalación de Discourse e importamos con éxito datos de phpBB.

Aquí están nuestros hallazgos:
La tabla “…_users” contiene un total de 3270 registros.
Al descargar los usuarios importados de Discourse, observamos que hay 3251 usuarios en Discourse.
Durante nuestro análisis, descubrimos que varios usuarios tienen un “1” añadido a sus nombres de usuario de Discourse, que en realidad se originaron en sus nombres de usuario de los datos de phpBB. Solo un usuario específico es “redacted_username1”, que no existe en los datos de phpBB. Sin embargo, el usuario “redacted_username” está presente en los datos de phpBB.

El correo electrónico asociado con el nombre de usuario de Discourse “edacted_username1” es “anonymous_52996ba94025464fdf3e5f3ae131bdf5@no-email.invalid”. Esto sugiere que el nombre de usuario “redacted_username” ya estaba en uso por un usuario anónimo, que luego agregó “1” a su nombre de usuario.

Para evitar tales ocurrencias en futuras importaciones, necesitamos obtener datos nuevos que excluyan a los usuarios anónimos y otros usuarios no deseados.

La discrepancia en el recuento de usuarios entre phpBB y Discourse es de 19. Dentro de los datos de phpBB, hay 53 usuarios que carecen de un correo electrónico asociado para sus cuentas.

Al buscar usuarios “anónimos” en Discourse, se devuelven 32 usuarios con correos electrónicos anónimos que actualmente están suspendidos. Los nombres de usuario asignados a estos usuarios anónimos no se pueden encontrar en los datos de phpBB. Esto implica que Discourse está asignando nombres de usuario ficticios a los usuarios anónimos, lo que podría causar errores futuros.

En resumen, 19 usuarios sin correo electrónico no fueron importados, mientras que 32 usuarios fueron sincronizados como correos electrónicos anónimos con nombres de usuario fabricados.

Por favor, comparta datos limpios de PHPBB para que podamos importarlos.

Además, si tiene alguna opinión al respecto, háganoslo saber.

A menos que vayas a eliminar a esos usuarios de la base de datos, modificaría el script para que los ignore. Es probable que obtener un volcado parcial no sea fácilmente repetible.

Si puedes simplemente eliminar a esos usuarios del sitio actual, esa parece una buena solución. Mi preferencia en situaciones como la tuya es leer directamente de la base de datos en vivo en lugar de transferir repetidamente un volcado.

1 me gusta