2010-12-03 2 views
27

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

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

ответ

37

Мы делаем это в одном из наших приложений. Вы можете сказать, DEViSE НЕ автоматически доставить подтверждение, как это:

@user.skip_confirmation! 

А потом, вы можете сделать

Devise::Mailer.confirmation_instructions(@user).deliver 

Для Rails 2.x вы могли бы сделать что-то вроде:

DeviseMailer.deliver_confirmation_instructions(@user) 
+4

Я должен также упомянуть, что вам нужно установить @ user.skip_confirmation! _before_ вы сохраняете запись. – mysmallidea 2011-01-06 16:41:57

+1

как dombesz, упомянутый в его ответе - @ user.skip_confirmation !, делает это: self.confirmed_at = Time.now.utc, так что позже у вас есть: user.active? == true ... пользователь может делать все, как если бы он подтвердил свой адрес электронной почты ... – santuxus 2012-01-12 16:44:16

+5

Я использую user.send_confirmation_instructions, так как это создаст токен подтверждения, если он не существует – 2012-06-14 21:55:21

-2

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

+0

Может быть задержка была плохой выбор слов. Я хочу остановить Devise от отправки электронной почты, но у вас есть действие, которое отправляет это письмо с подтверждением, когда администратор закончит настройку новой записи пользователя. – 2010-12-03 08:09:11

11

Решение не так просто, как ответ @Ryan Heneise. Если вы делаете @user.skip_confirmation!, он подтверждает пользователя, поэтому пользователь может войти в систему, не используя подтверждение, поэтому письмо с подтверждением в этом случае бесполезно. Это решение не позволяет пользователю войти в систему без подтверждения: Rails 3 with Devise for Authentication - How do I manually create a user?

1

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

def send_confirmation_instructions 
    generate_confirmation_token! if self.confirmation_token.nil? 
    ::Devise.mailer.delay.confirmation_instructions(self) 
end 

Добавьте его в модели пользователя, как защищенный метод переопределения DEViSE один в confirmable. Кроме того, обратите внимание, что камень был обновлен, чтобы добавить новый метод: overridden on create that sends the confirmation instructions.

9

Там теперь более простой способ (был добавлен обратно в v2.2.4)

confirmable модуль DEViSE теперь включает в себя идеальный skip_confirmation_notification! метод, который позволяет для более чистого раствора:

@user = User.new params[:user] 
@user.skip_confirmation_notification! 
@user.save 

# ... do stuff, then later... 

Devise::Mailer.confirmation_instructions(@user).deliver 
41

@ user.skip_confirmation! подтверждает пользователь, поэтому пользователь может войти в систему без подтверждения.

Это работает для меня в DEViSE 3.5

Stop изобрести отправить подтверждение по электронной почте при создании пользователя.

@user.skip_confirmation_notification! 

инструкции Отправить подтверждение позже

@user.send_confirmation_instructions 
Смежные вопросы