My Rails应用程序使用来自传统数据库的数据。来自此数据库的导入用户包含重复的电子邮件。使用电子邮件+密码进行身份验证(并且它是数据库中的独特组合)。 设计使用方法find_for_database_authentication
找到用户。然而,参数不包含密码(只是登录名)。在Devise中使用电子邮件+密码找到用户
我该怎么办?
My Rails应用程序使用来自传统数据库的数据。来自此数据库的导入用户包含重复的电子邮件。使用电子邮件+密码进行身份验证(并且它是数据库中的独特组合)。 设计使用方法find_for_database_authentication
找到用户。然而,参数不包含密码(只是登录名)。在Devise中使用电子邮件+密码找到用户
我该怎么办?
您可以在用户搜索模式这样
覆盖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
而且很可能配置/初始化/ devise.rb需要像水木清华:
config.authentication_keys = [ :email, :password ]
试试这个:
find_user = User.where("email = ?", params["user"]["email"]).first
find_user.valid_password?(params["user"]["password"])
+ 1(为我工作) – 3lviend 2014-08-20 04:58:01
方法self.find_for_database_authentication在用户模型类和参数不可访问 – maxs 2012-01-18 09:15:02
我的意思是你可以使用User.new获得encrypted_password表单设计与您拥有的凭据。编辑答案以匹配您的评论 – alony 2012-01-18 09:27:23
这是在设计控制器(在宝石中),而不是在我的控制器中 – maxs 2012-01-18 09:32:02