Change user's email without verification

Maybe I’m missing something obvious, but I cannot find it. As an admin, can I change someone’s email address without them having to verify it?

Off-hand, I’d guess something like this would work:

cd /var/discourse
./launcher enter app
rails c
User.find_by(email: "chowder@mmmm.fooo").update(email: "bisque@soup.mmmm")
exit
exit

That’s console access, obviously.

3 Me gusta

I vaguely recall another topic here about this exact situation; try some searches.

1 me gusta

Try this, the verification mail goes out, but they don’t have to respond to it:

Too late for me to edit that now, but it should be deactivate, change, reactivate iirc.

4 Me gusta

No problem I made it a wiki.

2 Me gusta

I am a new discourse user and I ran into the same issue. When I try the same approach (deactivate the user, update the email address, and then activate the user) it sending an email to confirm and it is only updating the email address after clicking the confirm email link. Is there a way to avoid this? I am using the API to do all the three actions.

There has been a change in the way emails are stored in the database.

The following commands should work:

cd /var/discourse
sudo ./launcher enter app
rails c

UserEmail.find_by(email: "oid@example.com").update(email: "new@example.com")
7 Me gusta

This will work fine but I am trying to do this via API as I will have to update multiple email addresses on a daily basis. Is it possible to do this via API?

3 Me gusta

¡Nigromancia masiva, sí, pero estoy experimentando un problema similar y, dado que la búsqueda me llevó aquí, puede ser relevante actualizar los comandos basándome en esta experiencia.

Mi situación es la siguiente:

  • Algunos de mis usuarios intentaron cambiar su correo electrónico principal.

  • Afirman que no funcionó. Dicen que recibieron un correo electrónico para confirmar, pero al hacer clic en el enlace siempre aparece un mensaje de “Expirado/No funciona”.

  • Como administrador, voy a cambiar dicho correo electrónico, haciéndolo editando su perfil.

  • Ahora el correo electrónico principal está “esperando confirmación/verificación”.

  • Los usuarios no reciben ningún correo electrónico de confirmación.

  • No importa cuántas veces presione la opción “reenviar correo electrónico de validación/confirmación” en su perfil, no se envía (verifiqué en la sección de Administración/Correo electrónico; no hay ningún correo electrónico saliente para eso. Irónicamente, si hago clic para enviarles el “correo electrónico de restablecimiento de contraseña”, ese se envía).

El caso es que, si alguno de esos usuarios borra las cookies, etc., no podrá acceder a su cuenta nuevamente (de hecho, esto está sucediendo ahora mismo). Así que intenté lo siguiente:

Pero estoy obteniendo NoMethodError: undefined method `update' for nil:NilClass. ¿Quizás los campos cambiaron nuevamente en los últimos dos años? :stuck_out_tongue:

Cualquier ayuda será bienvenida.

PD: Además, si intento cambiar el correo electrónico a algo diferente o al anterior, ahora yo (como administrador) recibo el mensaje “Ha realizado esta acción demasiadas veces. Por favor, inténtelo más tarde”. ¿Cuánto tiempo es “más tarde” y por qué el administrador tiene un límite de tasa al cambiar correos electrónicos si solo lo hice una vez? Probablemente hice algo mal y no me di cuenta :facepalm:

1 me gusta

Entonces, la entrega de correos electrónicos está funcionando; ¿quizás la hora del servidor está incorrecta? Si la hora del servidor no es correcta, esto puede ocurrir.

¡Funcionó para mí! Si aún tienes este problema (o para cualquier otra persona que encuentre este tema :sweat_smile:), creo que ese error aparecería si UserEmail.find_by(email: "oid@example.com") no devuelve nada. Podría valer la pena verificar dos veces si la dirección de correo electrónico coincide exactamente.

1 me gusta