23

ユーザー モデルで :reconfirmable というデバイス オプションを使用したいので、ユーザーが電子メールを変更するたびに、電子メールで送信されたリンクで確認する必要があります。

大きな問題は、メールが送信されないことです...

私のセットアップはdevise 2.1.2です:

ユーザーモデル:

attr_accessible: unconfirmed_email, ...

devise :invitable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable

初期化装置devise.rbで:

config.reconfirmable = true

ルートで:

devise_for :users

フォームでは、モデル フィールド unconfirmed_email が適切に設定されます。これをコンソールから確認しました。

ユーザーがページに登録したときの最初の確認メールは、問題なく送信されます。

after_update フックとしてトリガーされるデバイス メソッドを上書きするために、このコードを初期化ディレクトリに追加して問題のデバッグを試みました。

module Devise::Models::Confirmable
  def send_confirmation_instructions
    debugger
  end
end

デバッガーに到達しないため、 send_confirmation_instructions が呼び出されないようです。

どうにかして reconfirmable を呼び出す必要がありますか、それともモデル属性 "unconfirmed_email" を新しい電子メール アドレスに設定するときに自動的にトリガーされますか?

助けてくれてありがとう、j。

4

1 に答える 1

43

わかりました、これは恥ずかしいです..

Devise コードに飛び込んだ後unconfirmed_email、ユーザー モデルの属性を設定する必要はなく、既存のメール属性を変更するだけであることがわかりました。この属性unconfirmed_emailは、Devise が確認されるまでメールアドレスを保存するために内部的に使用されます。

devise gem の新しいバージョンでは、最初の移行でこれが説明されています。XXX_devise_create_users.rb移行からの「確認可能」セクション (最後の行のコメントに注意してください) は次のとおりです。

  ## Confirmable
  t.string   :confirmation_token
  t.datetime :confirmed_at
  t.datetime :confirmation_sent_at
  t.string   :unconfirmed_email # Only if using reconfirmable

お手数をおかけして申し訳ありませんが、これが同じ問題を抱えている誰かの助けになることを願っています...

于 2012-07-11T14:08:34.097 に答える