I have migrated users from old forum database. Is there any way to send password reset e-mails in bulk? I’ve tried to use API but got You have performed this action too many times, try again later. after requesting to send about 3 reset emails… (other API actions work fine)
I’d be happy to use ruby console or API if you can please advise how to go around that rate limit. It is probably limit per IP address as I’ve investigated.
[updated]
Seems like RateLimiter for ‘forgot_password’ is unfortunately hardcoded so I went ruby script way…
For mass reseting (sending out tokens for password reset to all users) you can do
cd /var/discourse
./launcher enter app
Then create new file mass-password-reset.rb using your favourite editor with following script:
User.all.each do |u|
email_token = u.email_tokens.create(email: u.email)
Jobs.enqueue(:critical_user_email, type: :forgot_password, user_id: u.id, email_token: email_token.token)
sleep(5)
end
And then run it with rails r mass-password-reset.rb
Awesome, thanks! I recently migrated data from my old forum and when tried to manually reset passwords for my users (not too many of them), ran into error message. Discourse logs didn’t show anything, tried to rebuild app and it didn’t help. Then tried your script and now via outsourced email sending service (and Sidekiq) I see that these mails are sending out. So, thanks again!
Hola, ¿conseguiste algo para resolver esto? Estaba a punto de probar ese script, pero he visto tu mensaje y ahora me pregunto si lograste solucionar esto.
Creo que la mejor opción sigue siendo que restablezcan su contraseña a través del enlace de restablecimiento de contraseña. ¿Hay alguna razón por la que su usuario no pueda hacer esto?
No, sería solo una cuestión de experiencia de usuario. Hemos estado migrando nuestro antiguo foro “vanilla” y creo que la mejor experiencia para los usuarios antiguos sería recibir un correo electrónico diciendo: “Hola, hemos migrado de nuestro foro a una nueva plataforma. Puedes iniciar sesión a través de este enlace: {link}”.
Oye, no sé si este sigue siendo el mejor lugar para preguntar esto, pero ¿sabrías cuánto dura el correo electrónico de restablecimiento de contraseña? Sé que expira en 3 o 4 días, pero necesito saberlo porque invitaré a mis usuarios de un foro antiguo y necesito enviar un mensaje notificándoles que el correo electrónico puede haber expirado después de n días, así que necesito el tiempo específico. Saludos.
¿Cómo ejecutamos este comando por usuario o solo para una lista de usuarios en un archivo de texto? Tengo alrededor de 8000 usuarios para migrar. Estoy creando los usuarios sin problemas con la API, pero luego los correos electrónicos no se envían debido a la limitación de velocidad codificada. También configuré mi dirección IP en ACEPTAR en la IP filtrada, pero todavía no funciona. ¿Es esto algo que solo se puede hacer en la consola de Rails?
Creo que usar un script de importación sería una mejor idea para crear tantos usuarios, pero eso es un tema aparte
De todos modos, alcanzarías el límite de tasa si envías el correo electrónico en el script también.
Si quieres ralentizar el proceso de envío de correos electrónicos, puedes añadir un sleep(x) (x en segundos) en el bucle ruby, y debe adaptarse a los límites de tasa existentes.
Si tienes la intención de que tu script se ejecute durante un tiempo, utiliza un gestor de sesiones como screen o tmux.
user = User.find_by(username: 'alehandrof')
if user
email_token = user.email_tokens.create(email: user.email)
Jobs.enqueue(:critical_user_email, type: :forgot_password, user_id: user.id, email_token: email_token.token)
end
No es necesario crear un archivo Ruby para esto; puedes ejecutarlo en la consola de Rails (./launcher enter app y luego rails c).