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

时间:2010-12-03 07:46:13

标签: ruby-on-rails ruby-on-rails-3 devise

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

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

7 个答案:

答案 0 :(得分:48)

  

@ user.skip_confirmation!确认用户,以便用户可以登录   没有使用确认。

这适用于我的设计3.5

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

@user.skip_confirmation_notification! 

稍后发送确认说明

@user.send_confirmation_instructions

答案 1 :(得分:37)

答案 2 :(得分:11)

解决方案并不像@Ryan Heneise那样简单。如果你@user.skip_confirmation!确认用户,那么用户可以在不使用确认的情况下登录,因此在这种情况下确认信是没用的。此解决方案不允许用户在未经确认的情况下登录:Rails 3 with Devise for Authentication - How do I manually create a user?

答案 3 :(得分: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 

答案 4 :(得分:1)

我只是花了一些时间研究这个,基本上你只需要添加它并设置delayed_job

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

将其作为受保护的方法添加到您的用户模型中,以覆盖confirmable中的设计方法。另外,请注意gem刚刚更新,以添加新方法overridden on create that sends the confirmation instructions

答案 5 :(得分:0)

答案 6 :(得分:-2)

您使用delayed job吗?它允许您为延迟运行定义单个方法。