Задержка и повторная отправка. Подтверждение электронной почты для пользователей, созданных вручную.
Я использую Devise, чтобы разрешить регистрацию пользователя так же хорошо, как с помощью моего собственного пользователя admin для создания пользователей вручную. Когда я создаю пользователя в admin, Devise немедленно отправляет подтверждение новому пользователю. Я считаю, что это связано с тем, что оба метода и мой администратор используют одну и ту же модель. Как мне отложить это письмо до тех пор, пока администратор не сможет его отправить?
Кроме того, для проверки настроек требуется, чтобы администратор установил пароль для нового пользователя. Я бы предпочел, чтобы вручную созданные пользователи указали свой собственный пароль, когда они отвечают на подтверждение. Прямо сейчас созданные вручную пользователи не будут знать свой пароль, если я не отправлю его тоже в дополнительном электронном письме.
Ответы
Ответ 1
Мы делаем это в одном из наших приложений. Вы можете сказать Devise NOT, чтобы автоматически доставлять подтверждение следующим образом:
@user.skip_confirmation!
И затем вы можете сделать
Devise::Mailer.confirmation_instructions(@user).deliver
Для Rails 2.x вы бы сделали что-то вроде:
DeviseMailer.deliver_confirmation_instructions(@user)
Ответ 2
@user.skip_confirmation! подтверждает пользователя, поэтому пользователь может войти в систему без подтверждения.
Это работает для меня в разработке 3.5
Прекратите разработку, чтобы отправить письмо с подтверждением при создании пользователя.
@user.skip_confirmation_notification!
Отправить инструкции по подтверждению позже
@user.send_confirmation_instructions
Ответ 3
Решение не так просто, как ответ @Ryan Heneise. Если вы выполняете @user.skip_confirmation!
, он подтверждает пользователя, поэтому пользователь может войти в систему, не используя подтверждение, поэтому письмо с подтверждением в этом случае бесполезно. Это решение не позволяет пользователю войти в систему без подтверждения: Rails 3 с Devise for Authentication - Как вручную создать пользователя?
Ответ 4
Теперь есть более простой способ (добавлен в v2.2.4)
Разработать модуль для подтверждения теперь включает в себя идеальное skip_confirmation_notification! метод, который позволяет использовать более чистое решение:
@user = User.new params[:user]
@user.skip_confirmation_notification!
@user.save
# ... do stuff, then later...
Devise::Mailer.confirmation_instructions(@user).deliver
Ответ 5
Я просто потратил некоторое время на это, в основном вам просто нужно добавить это и настроить delayed_job.
def send_confirmation_instructions
generate_confirmation_token! if self.confirmation_token.nil?
::Devise.mailer.delay.confirmation_instructions(self)
end
Добавьте его в свою модель пользователя в качестве защищенного метода, чтобы переопределить метод разработки в confirmable. Кроме того, обратите внимание, что камень был обновлен, чтобы добавить новый метод, чтобы переопределить при создании, который отправляет инструкции подтверждения.
Ответ 6
Теперь существует проект-асинхронный проект:
Ответ 7
Вы используете отложенную работу? Он позволяет определять отдельные методы для отложенного прогона.