Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用电子邮件查找用户+;设计中的密码_Ruby On Rails_Passwords_Devise - Fatal编程技术网

Ruby on rails 使用电子邮件查找用户+;设计中的密码

Ruby on rails 使用电子邮件查找用户+;设计中的密码,ruby-on-rails,passwords,devise,Ruby On Rails,Passwords,Devise,我的Rails应用程序使用传统数据库中的数据。从此数据库导入的用户包含重复的电子邮件。使用电子邮件+密码进行身份验证(这是DB中唯一的组合)。 Deviate使用方法find\u进行数据库身份验证查找用户。但是,参数不包含密码(仅包含登录名) 我能做什么?你可以用这种方式搜索 在用户模型中,覆盖“查找”方法: def self.find_for_database_authentication(warden_conditions) conditions = warden_conditions

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


我能做什么?

你可以用这种方式搜索

在用户模型中,覆盖“查找”方法:

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/develope.rb需要smth,如:

 config.authentication_keys = [ :email, :password ]

你可以这样搜索

在用户模型中,覆盖“查找”方法:

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/develope.rb需要smth,如:

 config.authentication_keys = [ :email, :password ]
试试这个:

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

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

用于数据库身份验证的方法self.find\u在用户模型类中,且参数不可访问。这意味着您可以使用User.new和您拥有的凭据获取加密的密码表单designe。编辑答案以匹配您的评论这是在Desive controller(在gem中)中,而不是在我的控制器中我的warden_条件根本不包含密码-仅用户名p warden_条件{:login=>“asdasdasd”}谢谢!我错过了config.authentication\u keys=[:email,:password]方法self.find\u for\u database\u身份验证在用户模型类中且参数不可访问我的意思是您可以使用User.new和您拥有的凭据获取加密的\u密码表单designe。编辑答案以匹配您的评论这是在Desive controller(在gem中)中,而不是在我的控制器中我的warden_条件根本不包含密码-仅用户名p warden_条件{:login=>“asdasdasd”}谢谢!我错过了config.authentication\u keys=[:email,:password]