Error crítico: nombre de usuario cambiado, usuario roto

Acabo de cambiar el nombre de usuario de una persona xxx a petición suya. Querían tomar un nombre de usuario inactivo yyy. Así que primero cambié el nombre de usuario inactivo yyy a algo más, como yyy1, y luego cambié el nombre de usuario de esa persona de xxx a yyy.

En este punto, primero el usuario no pudo publicar nada y vi el siguiente error en los registros:

Excepción del trabajo: PG::UniqueViolation: ERROR: el valor de clave duplicado viola la restricción de unicidad "index_users_on_username_lower" DETALLE: La clave (username_lower)=(mina) ya existe.

Intenté cambiar el nombre de usuario de nuevo al que tenía antes, pero ahora toda su historia ha desaparecido. ¿Qué salió mal exactamente aquí?

¿Puedes reproducir esto @tshenry?

Ahora ni siquiera puedo abrir su página de perfil. ¿Hay algo que pueda hacer para solucionarlo mientras tanto?

Estoy revisando los pasos que indicaste en este momento. Te informaré sobre lo que encuentre.

Por cierto, no sé por qué estoy recibiendo un error con este usuario (username_lower)=(mina) en absoluto. Nunca he realizado ningún cambio en él y parece ser un usuario inactivo. Sin embargo, también observo un comportamiento extraño en su perfil. Si abro su página de notificaciones, obtengo un error 404.

Ok, seguí los pasos. Si hice algo diferente de lo que tú hiciste, házmelo saber.

Hay dos usuarios:

  • xxx (cuenta activa)
  • yyy (cuenta inactiva)
  1. Cambiar yyy a yyy1
    Cambiar xxx a yyy
    ( :white_check_mark: funcionó para mí)

  2. Intentar publicar usando la nueva cuenta yyy
    ( :white_check_mark: funcionó para mí)

  3. Cambiar yyy de nuevo a xxx
    ( :white_check_mark: funcionó para mí, sin pérdida del historial del usuario)

No tuve ningún problema durante todo el proceso. Algo a tener en cuenta es que, después de cambiar el nombre de usuario de un usuario desde la página de administración de usuarios, deberás actualizar la página antes de que el botón “Mostrar perfil público” te lleve al usuario correcto.

¿Puedes revisar tus /admin/logs/staff_action_logs para ver si todos los cambios de nombre de usuario registrados tienen sentido? Al hacer clic en los avatares de los nombres de usuario listados, deberías ir a su página de usuario actual y correcta.

Sí, hacer clic en el avatar me lleva a su página. Sin embargo, me parece que su página está un poco inactiva. Por ejemplo, no puedo mostrar su correo electrónico ni suplantar su cuenta:

Esto es lo que he hecho hasta ahora:

Según lo que veo en este informe, primero cambié fatemeh por fatemeh12. Luego cambié fatemeh_baghdadi por fatemeh. Después de un tiempo, el usuario me dijo que no podía publicar nada. Pensé que quizás había algo mal en el proceso de cambio de nombre de usuario e intenté cambiarlo a uno que no se hubiera utilizado antes. Así que cambié fatemeh (anteriormente fatemeh_baghdadi) por fatemeh74. Entonces vi que su historial se había borrado por completo y me puse nervioso. Intenté cambiar el nombre de usuario de nuevo al original, de fatemeh74 a fatemeh_baghdadi, y luego de fatemeh_baghdadi a fatemeh_baghdadi5, pero nada mejoró. Ahora tengo dos usuarios diferentes: fatemeh74 y fatemeh_baghdadi5, que teóricamente deberían ser la misma persona, pero en realidad son dos personas distintas; una parece no funcionar correctamente.

Estoy haciendo todo lo posible para seguir el hilo. ¡Suena a una situación muy extraña!

¿Podrías aclarar a qué te refieres cuando dices que su historial fue completamente borrado? ¿Debería fatemeh_baghdadi5 tener varios temas y respuestas listados en la sección de actividad de su perfil?

Si es así, ¿están esos posts ahora asociados con la cuenta fatemeh74? Deberían existir en algún lugar del sitio y estar vinculados a un usuario específico. Desde la perspectiva de un usuario anónimo, no puedo encontrar un usuario con el nombre de usuario fatemeh74 en tu sitio.

Hay un trabajo en segundo plano llamado EnsureDbConsistency que se ejecuta cada 12 horas. Podría ser interesante ejecutarlo manualmente desde Sidekiq o esperar a ver si todo se corrige automáticamente en las próximas 12 horas.

Si terminas teniendo dos cuentas que deberían ser una, deberías poder fusionarlas. Sin embargo, definitivamente haría una copia de seguridad antes de intentarlo.

Es muy difícil entender qué está pasando sin tener acceso directo a todo, pero ¡esperemos que podamos resolverlo!

En el momento en que cambié el nombre de usuario, fui a su perfil y no vi publicaciones, etc., pero se solucionó después de un tiempo. Sin embargo, ahora fatemeh74, que en realidad parece ser la persona correcta, está bastante inactiva. Es decir, como puedes ver, no podemos ver su página de perfil, aunque sus publicaciones y otras cosas siguen presentes. Algo así:

https://talk.zabanshenas.com/t/topic/29066/3?u=hnaseri

En realidad no son una sola; revisé su correo electrónico y su ID, y son completamente diferentes. Sin embargo, según los pasos que seguí para cambiar los nombres de usuario, deberían ser los mismos, y en realidad no debería tener dos usuarios aquí.

¿Dónde está esto exactamente?

Gracias por compartir ese ejemplo. Eso es definitivamente preocupante.

Puedes encontrarlo listado en /sidekiq/scheduler. Vale la pena intentarlo, pero según lo que acabas de publicar, parece que podría haber un problema más profundo.

Lamentablemente, tienes razón. No solucionó mi problema.

@tshenry ¿Está bien que pueda tener dos nombres de usuario exactamente iguales, excepto por la primera palabra, que difiere en mayúsculas/minúsculas?

Creo que esto podría estar relacionado con el problema.

¡Esa es una observación interesante!

Los nombres de usuario son efectivamente insensibles a las mayúsculas y minúsculas, por lo que no debería ser posible tener dos usuarios con el mismo nombre. Sin embargo:

Puedes ver lo que parecen ser dos nombres de usuario distintos devueltos al buscar fatemeh12. Esto no debería haber sido posible (no he podido reproducirlo). Ambos parecen ir al mismo perfil.

No sé qué hacer a partir de aquí. Si alguien no se pronuncia para esta hora mañana, buscaré a alguien con algunas ideas frescas. Si encuentras cualquier información adicional que consideres relevante mientras tanto, por favor publícala.

Lo que entiendo hasta ahora es esto: En el primer paso, intenté cambiar fatemeh por fatemeh12 para liberar ese nombre de usuario. Sin embargo, ya existía un nombre de usuario Fatemeh12, por lo que en realidad no debería haberme permitido cambiar fatemeh a fatemeh12. Aun así, de manera extraña, me permitió hacerlo y, a partir de ahí, la base de datos se corrompió de alguna manera.

@tshenry ¿Encontraste algo? Ahora mismo el usuario fatemeh74, que había desaparecido, de alguna manera ha vuelto. No sé exactamente cómo, sin embargo. Quiero asegurarme de que esto no vuelva a ocurrir, así que necesito saber por qué tengo los mismos nombres de usuario con diferencias entre mayúsculas y minúsculas, y por qué Discourse no impide algo así. Mi instalación de Discourse ya está actualizada.

¡Hola! :wave: Qué bueno escuchar eso. Esperaba que un trabajo en segundo plano pudiera resolver el problema después de un tiempo. Parece que eso es lo que sucedió.

No he tenido la oportunidad de investigarlo más a fondo. Realmente estamos limitados en lo que podemos hacer para ayudar, ya que no tenemos acceso a la base de datos de tu sitio y solo podríamos profundizar de esa manera con nuestros clientes alojados en nuestra plataforma.

Esta es la primera vez que escuchamos que esto sucede y no he podido reproducir el comportamiento. Sospecho que se trata de un caso excepcional en tu instancia. Sin duda, estaremos atentos a cualquier ocurrencia similar en el futuro. Si quieres ser especialmente cuidadoso, te recomendaría verificar que no haya nadie con el mismo nombre de usuario antes de cambiarlo.

Estoy de acuerdo en enviar una copia de mi base de datos, si eso pudiera ayudar a encontrar el problema.

No hice nada y el usuario se volvió a romper :|. Definitivamente hay algo mal con mi base de datos.

También estamos experimentando este mismo problema desde hace mucho tiempo. Por supuesto, no hay forma de reproducir cómo la base de datos llegó a este estado, pero de vez en cuando terminamos con usuarios que se renombran a sí mismos para obtener nombres duplicados durante el período de gracia de renombrado, pero esto también aplica a los renombrados por administradores.

No utilizamos nombres de usuario en Unicode, y esto es bastante… problemático a veces, ya que interrumpe el trabajo de sincronización del complemento de Patreon del cual dependemos mucho para los servicios de políticas externas.