¡Hola a todos! Uno de mis usuarios del foro no pudo usar su cuenta para iniciar sesión en el foro desde nuestro sitio web y recibió este error. No hay problema con otras cuentas de usuario, solo con la suya. Pensé que tal vez se podría solucionar actualizando el foro a la versión más reciente, pero el problema sigue ahí.
¿Tienen alguna idea? Agradezco cualquier ayuda.
¿Hay algo especial en tu configuración de inicio de sesión, o en este usuario en particular? Creo que he visto errores similares relacionados con cuentas de administrador anteriormente, pero cuanta más información puedas proporcionar, mejor. ![]()
¿Estás viendo algún error en tus /logs?
¡Gracias por tu respuesta!
¿Te refieres a los registros en /var/discourse/shared/standalone/log/rails?
¿En qué registro se registra dicho error?
production.log o production_errors.log
El segundo está vacío.
Me refería a los registros en [TuSitio]/logs, o posiblemente si aparece algo en la consola del navegador cuando intentan iniciar sesión. Podría haber algún detalle adicional allí que ayude a reducir el problema.
¿Son un usuario no personal y tienen algún SSO habilitado?
Sí, supongo que todos los usuarios pueden iniciar sesión con SSO, porque no necesitan ingresar su cuenta y contraseña nuevamente para iniciar sesión en el foro. Son transferidos directamente del sitio web al foro.
Este es el error en la consola:
Y este es un posible registro de error en la web:
ActiveRecord::RecordInvalid (la validación falló: El correo electrónico principal ya ha sido adoptado) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed
Creo que este usuario en particular tiene un correo electrónico diferente en Discourse que en su sitio principal. ¿Podrías verificarlo para confirmarlo?
Sí, acabo de comprobar que el correo electrónico que se muestra en el panel de usuario de Discourse y el correo electrónico de nuestro sitio principal son los mismos.
He estado investigando y una posible razón podría ser que su correo electrónico haya llegado accidentalmente a tu lista de bloqueados. Puedes buscar y ver si ese es el caso en tu página /admin/logs/screened_emails. Si lo encuentras allí, desbloquearlo podría solucionar el problema.
(también vale la pena revisar su IP en /admin/logs/screened_ip_addresses)
Si no es el caso, otra posibilidad es que tuvieran una cuenta en el foro antes de que habilitaras el SSO. ¿Qué SSO estás utilizando?
Revisé /admin/logs/screened_ip_addresses y está vacío.
Lo siento, no entiendo a qué te refieres. (“¿Qué SSO estás usando?”) ¿Hay muchos tipos de SSO?
Me preguntaba si habías usado Discourse Connect o algo más, y a qué lo habías conectado para proporcionar la autenticación de tu usuario (WordPress, por ejemplo).
Ya hemos visto este error antes, acabo de hacer una búsqueda en nuestro sistema de tickets.
Esto ocurre cuando tienes:
require activationestablecido entrue- Un usuario U1 en Discourse con una dirección de correo electrónico específica, posiblemente con un ID externo A.
- Un usuario U2 en el lado del proveedor de DiscourseConnect con la misma dirección de correo electrónico y un ID externo diferente (B).
El usuario inicia sesión, Discourse comprueba si existe un usuario con el ID externo B, no existe.
Normalmente, Discourse realizará una coincidencia por correo electrónico como siguiente paso, pero dado que require activation está establecido, la dirección de correo electrónico no es confiable y omite este paso y no se asociará con el usuario U1 porque permitiría el secuestro de cuentas.
Entonces, Discourse decide crear un nuevo usuario. Eso falla porque el usuario U1 ya existe con esa dirección de correo electrónico.
Sería bueno que hubiera un mejor error en caso de que el correo electrónico exista pero no sea confiable. Tampoco estoy seguro de por qué muestra un error genérico de Rails.
Resoluciones:
- Si tus direcciones de correo electrónico en el lado del proveedor de DiscourseConnect están verificadas y se puede confiar en ellas, establece
require activationenfalse.
o - Cambia el ID externo del usuario U1 a B.
o - Cambia la dirección de correo electrónico del usuario U1 a otra cosa.
Añadiendo el texto “el cambio que querías fue rechazado” para que este tema sea encontrado cuando alguien busque este error.
Sí, estamos utilizando Discourse Connect y está conectado a nuestro sitio.
¡Muchas gracias por tu detallada respuesta! Las direcciones de correo electrónico en nuestro sitio se verifican cuando el usuario inicia sesión. Así que intentaré solucionar el problema con el método 1 en primer lugar. Pero en la configuración de administrador no encuentro dónde está “requerir activación por correo electrónico”.
Es un parámetro que se devuelve durante el proceso SSO, véase Disable email verification for SSO - #4 by simon
Para sitios que utilizan el plugin WP Discourse para la autenticación, los administradores del sitio también pueden marcar las direcciones de correo electrónico de usuarios individuales como verificadas desde la página de preferencias del usuario:
Esto es más seguro y fácil que deshabilitar la verificación de correo electrónico para todos los usuarios del sitio.
Me pregunto cuándo comenzó a suceder esto. Estoy bastante seguro de que el escenario que estás describiendo solía generar este mensaje de error: “Hay un problema con tu cuenta. Por favor, contacta al administrador del sitio”.
Aquí hay otro caso de un validador de Rails que falla y devuelve este error, y tiene 6.5 años. En el contexto de DiscourseConnect, esto es algo que solo hemos visto en los últimos meses.
¿Estamos usando la imagen de discourse, así que deberíamos simplemente agregar require_activation=true en env:?
Gracias por tu ayuda, pero no usamos WP. Estamos usando la imagen docker de discourse. ¿La forma correcta de configurarlo es agregar require_activation=true en env: del archivo app.yml?
No, vea Login error - #17 by RGJ como se publicó anteriormente, necesita pasar este parámetro por usuario. Esto requiere cambiarlo en su código del lado del servidor si es una implementación personalizada.


