如何在Devise中发送重置密码而不是确认电子邮件?

时间:2016-10-25 12:36:51

标签: ruby-on-rails devise email-confirmation

我试图这样做,以便如果创建一种类型的用户 - 然后发送重置密码链接(我已经实现,以便重置密码链接用作确认和重设密码)。这基本上是为了避免重复电子邮件,因为我允许创建没有密码的用户,以便用户可以通过重置密码请求他的第一个密码。

我试图像这样覆盖Confirmations Controller:

class Users::ConfirmationsController < Devise::ConfirmationsController

  def create
    if self.resource.encrypted_password.empty? then
      Users::PasswordsController.create
    else
      super
    end
  end

end

在路线中:

devise_for :users, controllers: { 
  passwords: 'users/passwords', 
  sessions: 'users/sessions',
  confirmations: 'users/confirmations',
  omniauth_callbacks: 'omniauth_callbacks'
}

最重要的是与其他模型一起使用。但是从不调用确认控制器中的创建操作。我在Gem本身周围放了很多byebug语句,看起来甚至原来的创建动作都没有被调用,但无论如何都要发送电子邮件。我正在使用sidekiq来延迟发送电子邮件。邮件中唯一可以运行的地方似乎是:

def confirmation_instructions(record, token, opts={})
  byebug # <- it does stop here
  @token = token
  devise_mail(record, :confirmation_instructions, opts)
end

但是当我检查堆栈跟踪时,它似乎是从某个labda函数调用的。

问题:为什么不使用ConfirmationsController进行设计,如何实现手头的任务?

非常感谢!

0 个答案:

没有答案