developer tip

Devise에서 사용자의 비밀번호를 확인하는 방법

copycodes 2020. 8. 29. 11:24
반응형

Devise에서 사용자의 비밀번호를 확인하는 방법


레일에서 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 방법 사용

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])

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

@joshaidan은 진정한 대답입니다.


나는 이것을 제안 할 것이다.

user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)

참고 URL : https://stackoverflow.com/questions/4320921/how-to-verify-a-users-password-in-devise

반응형