2012-07-08 8 views
20

ユーザーモデルで再確認可能なオプションを使用したいと思います。ユーザーがメールを変更するたびに、メールで送信されたリンクで確認する必要があります。が再確認可能

大きな問題は、電子メールが送信されることはありませんされることを、である...

マイセットアップが工夫2.1.2であるです:

ユーザモデル:initilizerの工夫で

attr_accessible: unconfirmed_email, ... 

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

.RB:路線で

config.reconfirmable = true 

devise_for :users 

の形でモデルフィールドunconfirmed_emailが正しく設定されます。私はコンソールでこれをチェックした。

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

私はafter_updateフックとしてトリガます工夫のMethodeのを上書きする初期化子のディレクトリにこのコードを追加することで問題をデバッグしようとした:

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

私が取得することはありませんので、send_confirmation_instructionsは、呼び出されることはありませんようにそれはそうデバッガ。

モデル属性「unconfirmed_email」を新しい電子メールアドレスに設定するときに、何らかの形で再確認する必要がありますか、自動的にトリガーされますか?

ご協力ありがとうございます。 j。

+1

を持つことができますあなたのUserテーブルに新しい列を追加する必要があります 't.string:unconfirmed_email#再確認可能な場合にのみ' これは既に実行しましたか? – Himshwet

+0

こんにちは。私のユーザモデルとattr_accessibleの属性を持っています...私はまだこの問題を解決していないので、どんな助けも非常にうまくいきます。 – user1311103

+0

申し訳ありませんが、何が間違っているのか理解できません – Himshwet

答えて

33

OKが、これは恥ずかしい..です

工夫コードにダイビングした後、私はあなたのユーザモデルの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 

は、うまくいけば、これは誰かが仕事にreconfirmableについて同じ問題...

+2

ありがとうございます。モデルの 'email'を更新するときに、Deviseが自動的に' unconfirmed_email'を生成することを知っておきましょう。あなたの答えを「受け入れられた」と記入することを忘れないでください(はい、自分で答えたにもかかわらず!)。 –

+0

はい...あなたは2年後であっても、それは私にとって有益だと思ったのです。 :) – Alfie

関連する問題