Login logic [5]
DATE : 2023/11/11
이번에 살펴볼 코드는 Hash된 비밀번호를 다루는 방법이 조금 달라서
정리해보기로 했다.
비밀번호에 Hash를 적용하는 방법은 여러 가지겠지만 앞에서 사용한 방법은
hash 함수를 사용하는 것이었다.
hash 함수도 여러 가지 알고리즘이 있기 때문에 사용할 알고리즘을 지정해주고
Hash 처리할 비밀번호를 두 번째 인수로 적어주는 형태이다.
PHP에는 hash 함수와 유사한 password_hash 함수가 존재한다.
hash 함수와 전달하는 인수의 순서가 반대인 걸 유의하도록 하자.
이 함수의 제일 큰 특징은 password_hash 결과로 나온 값을 (= hash 처리된 비밀번호)
사용자가 입력한 평문 비밀번호와 비교하기 위한 방법이다.
앞에서 살펴본 예시로는 hash 처리된 비밀번호를 다시 복원할 수 없기 때문에
사용자가 입력한 비밀번호에 동일한 hash 함수를 실행해 두 값을 비교할 수 있는 형태로 만들었다.
그.런.데
이상하게도 password_hash 함수를 사용하게 되면
동일한 비밀번호를 입력해도 만들어지는 hash 값이 달라진다.
그렇다 보니 회원 가입 과정에서 입력한 비밀번호와 동일한 값을 입력해도
계속 로그인에 실패하는 문제가 발생했다..!
찾아보니 password_hash로 생성된 hash 값은 평문 비밀번호와 일치하는 지 확인하기 위해
password_verify function을 사용해야 한다고 한다.
[ login_logic5.php ]
현재 DB에는 password_hash 함수로 만들어진 값이 들어가 있고
username이 일치하는 row를 찾아서 해당 row의 비밀번호를 가져온다고 했을 때
이를 비교하는 방법이 아래와 같음을 확인할 수 있다.
password_verify 함수는 password_hash 함수로 만들어진 hash 값과 비밀번호를 주면
전달한 hash 값이 비밀번호로 만들어진 hash가 맞는 지 확인해서 True or False를 반환한다.
즉, username이 일치하는 row를 가져왔을 때
해당 row의 비밀번호와 사용자가 입력한 비밀번호를 넘겨주면 password_verify 결과로
True (or False)가 나와 인증에 성공 했는지, 실패 했는지 여부를 알 수 있게 되는 것이다.
만약 password_hash 함수를 사용한다면 꼭 알아야 하는 내용인 듯하여 정리를 해보았다.
이렇게 해서! 비슷해 보이지만 조금씩 다른 Login logic에 대해 살펴보았다!!
각각의 logic을 살펴보는 것도 좋지만
Last updated