0

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のですか? また、目前のタスクをどのように達成するのですか?

どうもありがとう!

4

0 に答える 0