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モデルにこのようを検索することができます
メソッドself.find_for_database_authenticationはUserモデルクラスにあり、paramsにはアクセスできません – maxs
私はあなたが持っている資格情報でUser.newを使ってencrypted_passwordフォームを作成することができます。あなたのコメントにマッチする答えを編集しました – alony
これは私のコントローラではなく、Deviseコントローラにあります。 – maxs