1つのタイプのユーザーが作成された場合、確認メールを送信する代わりに、パスワードのリセットリンクを送信するようにしようとしています(パスワードのリセットリンクが確認とパスワードのリセットの両方として機能するように既に達成しています) . これは基本的に、メールの重複を避けるための試みです。これは、ユーザーがパスワードのリセットを介して最初のパスワードを要求できるように、パスワードなしでユーザーを作成できるようにするためです。
次のように確認コントローラーをオーバーライドしようとしています。
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
ステートメントを配置しましたが、元の create アクションでさえ呼び出されていないように見えますが、とにかくメールは送信されます。sidekiq
メールの遅延に使用しています。実行される唯一の場所は、メーラーのようです。
def confirmation_instructions(record, token, opts={})
byebug # <- it does stop here
@token = token
devise_mail(record, :confirmation_instructions, opts)
end
しかし、スタック トレースを確認すると、何らかの labda 関数から呼び出されているようです。
質問: なぜ devise を使用しないConfirmationsController
のですか? また、目前のタスクをどのように達成するのですか?
どうもありがとう!