Подтвердить что ты не робот

Задержка и повторная отправка. Подтверждение электронной почты для пользователей, созданных вручную.

Я использую Devise, чтобы разрешить регистрацию пользователя так же хорошо, как с помощью моего собственного пользователя admin для создания пользователей вручную. Когда я создаю пользователя в admin, Devise немедленно отправляет подтверждение новому пользователю. Я считаю, что это связано с тем, что оба метода и мой администратор используют одну и ту же модель. Как мне отложить это письмо до тех пор, пока администратор не сможет его отправить?

Кроме того, для проверки настроек требуется, чтобы администратор установил пароль для нового пользователя. Я бы предпочел, чтобы вручную созданные пользователи указали свой собственный пароль, когда они отвечают на подтверждение. Прямо сейчас созданные вручную пользователи не будут знать свой пароль, если я не отправлю его тоже в дополнительном электронном письме.

4b9b3361

Ответ 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. Кроме того, обратите внимание, что камень был обновлен, чтобы добавить новый метод, чтобы переопределить при создании, который отправляет инструкции подтверждения.

Ответ 7

Вы используете отложенную работу? Он позволяет определять отдельные методы для отложенного прогона.