Как проверить пароль пользователя в Devise - PullRequest
92 голосов
/ 01 декабря 2010

У меня проблема с сопоставлением пароля пользователя с использованием devise gem в rails. Пароль пользователя хранится в моей базе данных, который является encrypted_password, и я пытаюсь найти пользователя по паролю, но я не понимаю, как сопоставить пароль из формы и encrypted_password в моей базе данных.

User.find_by_email_and_password(params[:user][:email], params[:user][:password])

Ответы [ 5 ]

256 голосов
/ 06 декабря 2010

Я думаю, что это лучший и более элегантный способ сделать это:

user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])

Другой метод, при котором вы генерировали дайджест из пользовательского экземпляра, давал мне защищенные ошибки метода.

14 голосов
/ 05 февраля 2017

Использовать методы разработки

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

user = User.find_for_authentication(email: params[:user][:email])

user.valid_password?(params[:user][:password])

Для Rails 4+ с сильными параметрами вы можете сделать что-то вроде этого:

def login
  user = User.find_for_authentication(email: login_params[:email])

  if user.valid_password?(login_params[:password])
    user.remember_me = login_params[:remember_me]
    sign_in_and_redirect(user, event: :authentication)
  end
end

private
def login_params
  params.require(:user).permit(:email, :password, :remember_me)
end
6 голосов
/ 06 мая 2014

Я думаю, что лучшим будет этот

valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])
4 голосов
/ 24 апреля 2015
user = User.find_by_email_and_password(params[:user][:email])
user.valid_password?(params[:user][:password])

@ Джошайдан - верный ответ

0 голосов
/ 02 мая 2016

Я бы предложил это.

user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...