2012-01-17 15 views
0

My Railsアプリは従来のデータベースのデータを使用します。このDBからインポートされたユーザーには、重複した電子メールが含まれています。認証は電子メール+パスワードで行います(それはDB内のユニークな組み合わせです)。 Devitsは方法find_for_database_authenticationを使用してユーザーを検索します。しかし、paramsにはパスワード(ログイン名のみ)は含まれていません。Deviseでメールアドレス+パスワードを使用してユーザーを検索

どうすればよいですか?以下のようななめらかが必要になります

def self.find_for_database_authentication(warden_conditions) 
    conditions = warden_conditions.dup 

    email = conditions.delete(:email) 
    pwd = conditions.delete(:password) 
    encrypted_pwd = User.new(password: pwd).encrypted_password 

    where(conditions).where(["lower(email) = :email AND encrypted_password = :pwd", { :email => email.strip.downcase, :pwd => encrypted_pwd }]).first 
end 

、おそらく設定/初期化子/ devise.rb:

あなたはUserモデルにこのよう

を検索することができます

答えて

1

は、findメソッドをオーバーライド

config.authentication_keys = [ :email, :password ] 
+0

メソッドself.find_for_database_authenticationはUserモデルクラスにあり、paramsにはアクセスできません – maxs

+0

私はあなたが持っている資格情報でUser.newを使ってencrypted_pa​​sswordフォームを作成することができます。あなたのコメントにマッチする答えを編集しました – alony

+0

これは私のコントローラではなく、Deviseコントローラにあります。 – maxs

2

試してみてください:

find_user = User.where("email = ?", params["user"]["email"]).first 
find_user.valid_password?(params["user"]["password"]) 
+0

+1(私の仕事) – 3lviend

関連する問題