繁体   English   中英

在Devise中使用电子邮件+密码查找用户

[英]Find user using email + password in Devise

我的Rails应用程序使用旧数据库中的数据。 从此数据库导入的用户包含重复的电子邮件。 使用电子邮件和密码进行身份验证(这是数据库中的唯一组合)。 Devise使用方法find_for_database_authentication查找用户。 但是,参数不包含密码(仅登录名)。

我能做什么?

尝试这个 :

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

你可以这样搜索

在用户模型中覆盖find方法:

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

可能config / initializers / devise.rb将需要smth,如:

 config.authentication_keys = [ :email, :password ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM