延迟和/或重新发送Devise的手动创建用户的确认电子邮件

Tim*_*ord 28 ruby-on-rails devise ruby-on-rails-3

我正在使用Devise来允许用户注册,以及使用我自己的用户admin来手动创建用户.当我在管理员中创建用户时,Devise会立即向新用户发送确认.我相信这是因为设计和我的管理员都使用相同的模型.在管理员准备发送此电子邮件之前,如何延迟此电子邮件?

此外,Devise的验证要求管理员为新用户设置密码.我更希望手动创建的用户在回复确认时指定自己的密码.现在手动创建的用户将不知道他们的密码,除非我在补充电子邮件中发送它们.

Jas*_*ant 49

@ user.skip_confirmation!确认用户,因此用户无需使用确认即可登录.

这在设计3.5中适用于我

停止设计以在创建用户时发送确认电子邮件.

@user.skip_confirmation_notification! 
Run Code Online (Sandbox Code Playgroud)

稍后发送确认说明

@user.send_confirmation_instructions
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最好的答案.`skip_confirmation!`自动确认用户,因此对OP的用例毫无意义. (2认同)

Boo*_*age 37

我们在其中一个应用中执行此操作.您可以告诉Devise NOT自动发送如下确认:

@user.skip_confirmation!
Run Code Online (Sandbox Code Playgroud)

然后,你可以做到

Devise::Mailer.confirmation_instructions(@user).deliver
Run Code Online (Sandbox Code Playgroud)

对于Rails 2.x,您可以执行以下操作:

DeviseMailer.deliver_confirmation_instructions(@user)
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用user.send_confirmation_instructions,因为如果不存在,将生成确认令牌 (5认同)
  • 我还要提一下,你必须设置@ user.skip_confirmation!_before_你保存记录. (4认同)

dom*_*esz 11

解决方案并不像@Ryan Heneise那样简单.如果您这样做@user.skip_confirmation!确认了用户,那么用户可以在不使用确认的情况下登录,因此在这种情况下确认信是无用的.此解决方案不允许用户在没有确认的情况下登录:Rails 3 with Devise for Authentication - 如何手动创建用户?


aml*_*160 10

现在有一种更简单的方法(在v2.2.4中添加)

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 
Run Code Online (Sandbox Code Playgroud)