Найти пользователя по электронной почте + пароль в Devise - PullRequest
0 голосов
/ 17 января 2012

Приложение My Rails использует данные из устаревшей базы данных. Импортированные пользователи из этой БД содержат дубликаты электронных писем. Аутентификация выполняется по электронной почте + пароль (и это уникальная комбинация в БД). Devise использует метод find_for_database_authentication для поиска пользователя. Однако параметры не содержат пароль (только имя пользователя).

Что я могу сделать?

Ответы [ 2 ]

2 голосов
/ 20 августа 2014

попробуйте это:

find_user = User.where("email = ?", params["user"]["email"]).first
find_user.valid_password?(params["user"]["password"])
1 голос
/ 17 января 2012

Вы можете искать таким образом

в модели пользователя переопределяет метод поиска:

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 потребуется что-то вроде:

 config.authentication_keys = [ :email, :password ]
...