레일에서 devise gem을 사용하여 사용자 비밀번호를 일치시키는 데 문제가 있습니다. 사용자 암호는 encrypted_password이고 암호로 사용자를 찾으려고하는데 db의 암호와 암호를 일치시키는 방법을 이해하지 못합니다.
User.find_by_email_and_password(params[:user][:email], params[:user][:password])
답변:
나는 이것이 더 좋고 우아한 방법이라고 생각합니다.
user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])
사용자 인스턴스에서 다이제스트를 생성하는 다른 방법은 보호 된 메서드 오류를 제공하는 것입니다.
Devise는 사용자의 암호를 확인하는 기본 제공 방법을 제공 합니다 .
user = User.find_for_authentication(email: params[:user][:email])
user.valid_password?(params[:user][:password])
들어 강력한에 Params와 레일 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
이거 더 좋을 것 같아요
valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])