2010-12-20 6 views
6

私は別のテーブルに電子メールを格納し、複数の電子メールを保存してそれらの電子メールでログインできるようにしたいと思います。私はまた、別のテーブルにパスワードを格納したいと思います。Ruby on RailsでDeviseを設定して、電子メールとパスワードをユーザーモデル以外の場所に保存するにはどうしたらいいですか?

他の場所で認証情報を格納するようにDeviseを設定するにはどうすればよいですか?

私はちょうどそれにハックする必要がある場合、アプリにすべてを移植するジェネレータはありますか?私は、ビューのジェネレータがあることに気づいた。

ありがとうございました。

+0

これは古い投稿ですが、ユーザー登録時に何をしましたか? (例:関連する電子メールレコードを作成するbefore_saveフィルタ) – robertwbradford

答えて

6

これを行うには、モデルを正しく設定して、メールの関連付けを作成するだけです。また、ユーザーfinderメソッドをdeviseからオーバーライドする必要があります。これを行うには、self.find_for_database_authentication(条件)メソッドをオーバーライドする必要があります。

class User < ActiveRecord::Base 
    has_many :emails 
    accepts_nested_attributes_for :emails 
    ... 
    def self.find_for_database_authentication(conditions) 
    email = conditions.first 
    self.where(:emails=>{:name=>email}) 
    end 
end 

また、devise.rbに電子メールを追加して使用する必要があります。

Devise.setup do |config| 
    ... 
    config.authentication_keys = [ :emails ] 
    ... 
end 

私はコードを実行していない、多分それはいくつかのエラーがありますが、私はあなたがアイデアを得ることを願っています。何かが明確でないことを私に教えてください。 乾杯。

更新

最初の質問:はい、工夫の方法が自動的にオーバーライド蜂ます。

2番目の質問:あなたが持っている必要がありyour_application_path /設定/初期化子/ devise.rb 私はあなたが工夫の宝石を使用する場合、それが作成だと思います。あなたが持っていない場合は、それを作成することができます。私が指定した内容は良いです。ドット(...)を省略してください。

+0

私はこれを試みる前に、非常に新しい(とプログラミング)、いくつかの質問があります:もし私が宝石と同じ名前の自分のメソッドを書くならモデル、それは自動的に宝石をオーバーライドしますか?それとも宝石からそれを剥がさなければならないのですか?また... 2番目の例では、これは外部ライブラリ/ device/lib/devise.rbで行いますか?私はDevise.setup do | config |が表示されません。ありがとう! – TLK

+0

私の更新を参照してください – dombesz

+0

私もこれを試していますが、ユーザー登録時は何ですか? – robertwbradford

関連する問題