#ruby-on-rails #email #devise
#ruby-on-rails #Адрес электронной почты #devise
Вопрос:
У меня довольно стандартная установка devise с recoverable
confirmable
включенными обоими и.
Дело в том, что мне нужно отключить сброс пароля, если пользователь еще не подтвердил свою электронную почту
Например:
- пользователь регистрируется по электронной почте whatever@example.com
- отправляется письмо с подтверждением
- пользователь переходит на страницу и сбрасывает пароль перед подтверждением своей электронной почты
- электронное письмо со сброшенным паролем не должно отправляться
Комментарии:
1. У меня есть эта проблема, плюс еще один плохой побочный эффект. Когда пользователь делает это и переходит к экрану сброса пароля, он может ввести любой пароль, который он хочет, и два пароля даже не должны совпадать.. Странно.
2. Я не сталкивался с такой ошибкой, а с другой. Когда вы не подтверждаете электронное письмо и переходите по ссылке, указанной в вашем «электронном письме со сброшенным паролем», у вас есть только один шанс изменить его, в противном случае отображается «недопустимый токен», но когда вы подтверждаете электронное письмо, все в порядке
Ответ №1:
Я знаю, что это старая проблема, но у меня был тот же вариант использования, и я решил его, переопределив метод devise send_reset_password_instructions для пользовательской модели. Вот окончательная версия моего метода:
def self.send_reset_password_instructions(attributes={})
recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
if (recoverable.persisted? amp;amp; !recoverable.confirmed?)
recoverable.errors.add(:email, I18n.t('devise.failure.not_verified'))
else
recoverable.send_reset_password_instructions
end
recoverable
end
Чтобы быть более конкретным — если пользователь сохраняется в базе данных, но не проверяется по электронной почте, добавьте ошибку и пропустите отправку пароля для сброса по электронной почте.