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