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!
Попробовал это, но модель данных теперь изменилась (из-за, как я полагаю, вторичного адреса электронной почты). Адреса электронной почты теперь, кажется, находятся в объекте User Email.
Привет! Тебе удалось что-то сделать, чтобы решить эту проблему? Я собирался попробовать тот скрипт, но увидел твоё сообщение и теперь думаю, получилось ли у тебя обойти это.
Я думаю, что лучший вариант по-прежнему — попросить их сбросить пароль через ссылку для сброса. Есть ли причина, по которой ваш пользователь не может этого сделать?
Нет, это просто вопрос удобства пользователей. Мы переносим наш старый форум на Vanilla, и я считаю, что лучший опыт для старых пользователей — получить письмо с сообщением: «Привет, мы перенесли наш форум на новую платформу. Вы можете войти по этой ссылке: {link}».
Ой, извините, я хотел вернуться к этому вчера, когда понял, что вы хотели сделать массовое обновление, а не одиночное. Но я рад, что вы сами разобрались.
Я выделю эту задачу отдельно, чтобы её было проще найти в будущих поисках.
Привет! Не уверен, что это всё ещё лучшее место для такого вопроса, но не подскажешь, сколько времени действует ссылка для сброса пароля в письме? Я знаю, что она истекает через 3 или 4 дня, но мне нужно точное значение, так как я планирую пригласить пользователей со старого форума и отправить им уведомление о том, что ссылка может устареть через определённое количество дней. Заранее спасибо!
Как запустить эту команду для каждого пользователя отдельно или для списка пользователей из текстового файла? У меня около 8000 пользователей, которых нужно перенести. Создание пользователей через API проходит без проблем, но письма не отправляются из-за жёстко заданного ограничения по скорости. Я также добавил свой IP-адрес в список «Screened IP» с разрешением ACCEPT, но всё равно не получается. Возможно ли это сделать только через rails console?
Думаю, для создания такого количества пользователей лучше использовать скрипт импорта, но это уже не по теме
В любом случае, если вы также отправляете письма в скрипте, вы упрётесь в лимит запросов.
Если вы хотите замедлить процесс отправки писем, добавьте sleep(x) (x — время в секундах) в цикл Ruby; это значение нужно подобрать в соответствии с установленными лимитами запросов.
Если вы планируете запускать скрипт на длительное время, используйте менеджер сессий, например screen или 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
Нет необходимости создавать отдельный Ruby-файл для этого; вы можете запустить код в консоли Rails (./launcher enter app, затем rails c).