我正在尝试这样做,以便如果创建了一种类型的用户 - 然后它不会发送确认电子邮件,而是发送重置密码链接(我已经实现了重置密码链接作为确认和重置密码) . 这基本上是为了避免重复电子邮件,因为我允许创建没有密码的用户,以便用户可以通过重置密码请求他的第一个密码。
我正在尝试像这样覆盖确认控制器:
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
以及如何完成手头的任务?
非常感谢!