Inscripciones fantasma (dos usuarios con la misma cuenta después de la migración)

Hola, he tenido un problema que comenzó hace varias actualizaciones de Discourse: recibo notificaciones indicando que hay un nuevo usuario esperando aprobación, pero al revisar la cola de revisión esta aparece vacía.

Esto solo ocurre cuando un solo usuario solicita aprobación. Si hay varias personas esperando, puedo ver a todas menos una en la cola; sin embargo, siempre falta una.

En otras palabras, muchas personas no han podido registrarse.

En un hilo separado, se sugirió que el plugin de selección múltiple podría estar involucrado de alguna manera y hacer que Discourse sume uno a la longitud de la cola.

En general, esto parece poco probable, ya que debe estar ocurriendo algo que active la notificación en algunos días y no en otros. Además, el problema no comenzó cuando se instaló el plugin; surgió varios meses después, y solo puedo correlacionarlo con una actualización de Discourse (ya que no creo que se hayan realizado otros cambios o instalado otros plugins desde entonces).

¿Alguien más ha experimentado esto? ¿Y cuál podría ser la solución?

Por si acaso, @jjaffeux, ¿es posible que la corrección “FIX: makes value parsing more resilient” que aplicaste a este plugin pueda estar relacionada con este problema?

¿Este plugin está relacionado o se basa únicamente en la funcionalidad central de Discourse? No lo tengo claro.

Hola, tampoco tengo claro el asunto. ¿Podría ser ambas cosas? El problema no comenzó cuando se instaló el plugin por primera vez, sino hace unas actualizaciones principales. Si el plugin está involucrado en algo, quizás haya alguna interacción no intencionada.

No puedo probar desinstalando el plugin para ver si el problema persiste, ya que es crítico para el funcionamiento: la validación de los registros de usuarios depende de las respuestas que solo pueden proporcionar con este plugin activo (los usuarios necesitan hacer selecciones de una lista desplegable).

GitHub - procourse/discourse-multiselect-user-field · GitHub realmente no debería ser un plugin, solo incluye JavaScript.

Supongo que mi primera recomendación aquí sería esperar al “estado defectuoso”… luego habilitar el modo seguro de tu navegador y ver si la cola se ve bien.

Si se ve bien en modo seguro, probablemente quieras publicar en Marketplace para que el plugin se convierta en un componente de tema y se actualice a los patrones más recientes de Discourse.

1 me gusta

Hola, gracias, Sam.

Por desgracia, los resultados son los mismos en modo seguro: en respuesta a una notificación de usuarios pendientes, aún falta uno en la cola para ser revisado, incluso cuando visito en el modo seguro de Discourse con los tres elementos de personalización del sitio desactivados.

¿Qué sugiere esto?

Es posible que necesitemos que un experto en la cola de revisión eche un vistazo a este tema. Lo marcaré y alguien te responderá en los próximos días.

Los pasos exactos para reproducir el problema serían increíblemente útiles.

Gracias, Sam.
Es muy difícil identificar los pasos exactos: no estoy seguro de qué he hecho que pueda ser inusual, y no puedo vincular el inicio del problema a ningún evento específico.

En mi opinión, los principales sospechosos son una actualización de Discourse o una actualización del plugin de selección múltiple de @j.jaffeux el 14 de marzo para “hacer el análisis de valores más resistente”.

El problema es que los nuevos registros son tan intermitentes que pueden pasar semanas sin que haya uno, por lo que la causa y el efecto pueden estar muy separados en el tiempo.

¿Puedes provocar el problema tú mismo usando el modo incógnito de Chrome y creando cuentas falsas?

Creo que necesito designar una dirección de correo electrónico válida para que una solicitud llegue siquiera a la cola.

No tengo ninguna dirección de correo electrónico que no haya utilizado ya con fines de prueba; todas ya tienen cuentas.

Si tienes Gmail, puedes usar el direccionamiento con el signo más… jane+algo@gmail.com llega a jane@gmail.com

OK, eso fue interesante: intenté usar mi cuenta de Gmail como se indicó anteriormente, pero incluso mientras abría la página web de Gmail en otra ventana del navegador y esperaba que apareciera el correo de verificación generado por Discourse, recibí una notificación en mi dirección de correo habitual de administrador sobre un nuevo registro por revisar (y la cola seguía vacía como antes). Había escrito mal la dirección, por lo que nunca recibí el correo en mi cuenta de Gmail y, por tanto, nunca verifiqué.

Así que, a menos que esto sea una coincidencia, ¿quizás las notificaciones de administrador se están anticipando? Aunque eso no explicaría por qué CADA notificación implica exactamente una persona faltante en la cola; presumiblemente, no siempre habrá un fallo en la verificación del correo de un solo solicitante y no de los demás.

** Edición

Posteriormente, corregí mi dirección de Gmail en esa ventana de incógnito de registro y reenvié el correo de verificación, el cual entonces apareció en la ventana del navegador de Gmail. Verifiqué esto correctamente utilizando la URL de verificación en otra ventana de incógnito. No se envió ninguna notificación posterior a mi correo de administrador, por lo que solo puedo asumir que la primera notificación estaba efectivamente asociada con este nuevo intento de registro.

Usando otra ventana del navegador, visité el sitio nuevamente en modo seguro, inicié sesión como administrador y vi que la misma cola seguía teniendo una persona por revisar, pero esta vez mi nueva cuenta de prueba era visible y podía ser aprobada.

¿Aclara algo de esto el problema?

Para dar seguimiento: lo intenté de nuevo y creé una nueva cuenta falsa mediante una ventana de incógnito (con la dirección correcta desde el primer intento); este intento funcionó como se esperaba, y al responder a la notificación enviada por correo electrónico al administrador desde una ventana de navegador normal, vi que el nuevo usuario aparecía en la cola.

Lo repetí con un nuevo registro desde una ventana estándar, respondiendo a la notificación desde una ventana estándar (sin incógnito ni modo seguro en ningún momento), y nuevamente todo funcionó como debería. Por lo tanto, el problema (o quizás dos problemas: la notificación al administrador incluso antes de que el solicitante verifique su dirección de correo electrónico, y la no aparición de la solicitud incompleta o completada en la cola) se limitó al primer intento.

Nuevamente, no estoy seguro de si esto aporta mucha claridad, pero tal vez, una vez que el sistema ha fallado en un primer registro (generando una notificación fantasma), los registros subsiguientes funcionen correctamente. ¿Quizás el sistema vuelve al modo de fallo después de suficiente tiempo sin actividad de nuevos registros?

Hola @Paul_King

Sospecho que una migración que agregué alrededor de la misma época del commit que mencionaste causó este problema, haciendo que algunos usuarios no aprobados parezcan estar en la cola de revisión y provocando notificaciones extrañas.

¿Podrías ejecutar esta consulta en el explorador de datos para confirmar que es así?

SELECT COUNT(*)
FROM users
INNER JOIN reviewables r ON r.target_id = users.id
WHERE r.type = 'User' AND r.status = 1 AND users.approved = FALSE
1 me gusta

Hola Roman.

Acabo de ejecutarlo y, asumiendo que lo hice correctamente (ver captura de pantalla), el conteo fue cero

.

Sin embargo, mi instalación de Discourse también muestra actualmente que no hay usuarios esperando.
Acabo de crear otra cuenta falsa y he verificado la dirección, pero hasta ahora no se ha enviado ninguna notificación a mi correo de administrador. Al volver a iniciar sesión en mi sitio como administrador, volví a ejecutar la consulta y el conteo volvió a ser cero, pero esta vez Discourse informa correctamente (ahora) que hay un usuario pendiente de revisión

.

Normalmente, las notificaciones por correo electrónico para revisar usuarios llegan casi de inmediato a mi dirección de administrador, así que estoy bastante seguro de que esta no se envió. ¡Ahora tengo casi el problema opuesto!

*EDITO - Acabo de recibir una notificación de que HAY DOS usuarios pendientes de revisión (tras un retraso inusual). Aun así, el pequeño icono rojo junto al menú hamburguesa mostraba el número ‘1’, y al hacer clic para revisar la cola solo aparecía mi propia cuenta falsa de arriba, la cual aprobé, y Discourse indicó que no había más usuarios por revisar.

Después de esto, volví a ejecutar la consulta y el conteo fue cero.

1 me gusta

Lo siento, me di cuenta de que la cláusula WHERE está mal. Debería ser r.type = 'ReviewableUser' en lugar de User.

¿Podrías ejecutar esta en su lugar?

SELECT COUNT(*)
FROM users
INNER JOIN reviewables r ON r.target_id = users.id
WHERE r.type = 'ReviewableUser' AND r.status = 1 AND users.approved = FALSE
1 me gusta

Hola Roman
Acabo de recibir otro mensaje fantasma, luego leí tu último mensaje y ejecuté la nueva consulta: mismo resultado: count=0

Entonces tiene que ser otra cosa. Lo investigaré.

3 Me gusta

Hola @Paul_King,

¿Podrías verificar si tu sitio tiene algún usuario no aprobado sin un objeto revisable asociado? He estado intentando reproducir este error sin éxito hasta ahora.

Aquí tienes una consulta para hacerlo:

SELECT COUNT(*) 
FROM users u
LEFT JOIN reviewables r ON r.target_id = u.id AND r.type = 'ReviewableUser'
WHERE approved = false AND r.id IS NULL

Además, prueba esto:

SELECT COUNT(*) FROM users WHERE approved = false AND active = true
1 me gusta

Hola, gracias Roman.

Aquí está el resultado de la primera consulta:

No estoy seguro de si es relevante, pero hay muchas publicaciones importadas de un grupo de Yahoo ya inactivo que fue el precursor del foro actual. Se fusionaron por razones de continuidad y para mejorar la búsqueda. Los creadores de esas publicaciones antiguas (de principios de los años 2000) a menudo no tienen cuentas en el foro actual.

Los resultados de la segunda consulta a continuación:

Esto fue muy interesante: ¿cómo puede alguien tener una cuenta no aprobada y aun así estar activo? ¿A menos que sea yo como administrador? ¿Cómo puedo ajustar la consulta para identificar a ese usuario?

Eso simplemente significa que está esperando aprobación.

SELECT * FROM users WHERE approved = false AND active = true

El nombre de usuario será un enlace al perfil del usuario. Una vez que lo identifiques, ¿podrías compartir la fecha created_at? Me gustaría saber si cambiamos algo alrededor de esa fecha.