Как проверить пароль пользователя в программе
У меня возникла проблема с совпадением пароля пользователя с помощью devem gem в rails. Пароль пользователя, хранящийся на моем db, который является encrypted_password, и я пытаюсь найти пользователя по паролю, но я не понимаю, как совместить пароль из формы и encrypted_password в моем db.
User.find_by_email_and_password(params[:user][:email], params[:user][:password])
Ответы
Ответ 1
Я думаю, что это лучший и более элегантный способ сделать это:
user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])
Другой метод, в котором вы генерируете дайджест из экземпляра пользователя, дает мне защищенные ошибки метода.
Ответ 2
Использовать методы разработки
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
Ответ 3
Я думаю, что лучшим будет этот
valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])
Ответ 4
user = User.find_by_email_and_password(params[:user][:email])
user.valid_password?(params[:user][:password])
@joshaidan - верный ответ
Ответ 5
Я бы предложил это.
user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)