延迟和/或重新发送Devise的手动创建用户的确认电子邮件
我正在使用Devise来允许用户注册,以及使用我自己的用户admin来手动创建用户。 当我在管理员中创建用户时,Devise会立即向新用户发送确认。 我相信这是因为设计和我的管理员都使用相同的模型。 在管理员准备发送此电子邮件之前,如何延迟此电子邮件?
此外,Devise的validation要求管理员为新用户设置密码。 我更希望手动创建的用户在回复确认时指定自己的密码。 现在手动创建的用户将不知道他们的密码,除非我在补充电子邮件中发送它们。
我们在其中一个应用中执行此操作。 您可以告诉Devise NOT自动发送如下确认:
@user.skip_confirmation!
然后,你可以做到
Devise::Mailer.confirmation_instructions(@user).deliver
对于Rails 2.x,您可以执行以下操作:
DeviseMailer.deliver_confirmation_instructions(@user)
@ user.skip_confirmation! 确认用户,因此用户无需使用确认即可登录。
这适用于我的设计3.5
停止设计以在创建用户时发送确认电子邮件。
@user.skip_confirmation_notification!
稍后发送确认说明
@user.send_confirmation_instructions
解决方案并不像@Ryan Heneise那样简单。 如果你做@user.skip_confirmation!
它确认了用户,因此用户可以在不使用确认的情况下登录,因此在这种情况下确认信是没用的。 此解决方案不允许用户在没有确认的情况下登录: Rails 3 with Devise for Authentication – 如何手动创建用户?
现在有一种更简单的方法(在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
我只是花了一些时间研究这个,基本上你只需要添加它并设置delayed_job 。
def send_confirmation_instructions generate_confirmation_token! if self.confirmation_token.nil? ::Devise.mailer.delay.confirmation_instructions(self) end
将其作为受保护的方法添加到您的用户模型中,以覆盖可确认的设备 。 另外,请注意gem刚刚更新,以便在创建时添加一个新方法,以发送确认指令 。
现在有一个设计 – 异步项目:
你使用延迟工作吗? 它允许您为延迟运行定义单个方法。