我正在使用 Devise 来允许用户注册,以及使用我自己的用户管理员手动创建用户。当我在管理员中创建用户时,Devise会立即向新用户发送确认。我相信这是因为设计和我的管理员都使用相同的模型。在管理员准备发送此电子邮件之前,如何延迟此电子邮件?
此外,Devise的验证要求管理员为新用户设置密码。我更希望手动创建的用户在回复确认时指定自己的密码。现在手动创建的用户不会知道他们的密码,除非我在补充电子邮件中发送它们。
答案 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吗?它允许您为延迟运行定义单个方法。