0

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

我正在尝试像这样覆盖确认控制器:

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以及如何完成手头的任务?

非常感谢!

4

0 回答 0