简体   繁体   English

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

[英]Find user using email + password in Devise

My Rails app uses data from legacy database. 我的Rails应用程序使用旧数据库中的数据。 Imported users from this DB contain duplicate emails. 从此数据库导入的用户包含重复的电子邮件。 Authentication doing with email+password (and it's a unique combination in DB). 使用电子邮件和密码进行身份验证(这是数据库中的唯一组合)。 Devise uses method find_for_database_authentication to find user. Devise使用方法find_for_database_authentication查找用户。 However params don't contain password (just login name). 但是,参数不包含密码(仅登录名)。

What can I do? 我能做什么?

try this : 尝试这个 :

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

You can search this way 你可以这样搜索

in the User model override the find method: 在用户模型中覆盖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

And probably config/initializers/devise.rb will require smth like: 可能config / initializers / devise.rb将需要smth,如:

 config.authentication_keys = [ :email, :password ]

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

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