로그인/회원가입 - #7 Bcrypt로 비밀번호 암호화 하기

Chipmunk_jeong·2021년 5월 26일

boiler-plate

목록 보기
7/23
post-thumbnail

클라이언트에서 받아온 비밀번호를 데이터베이스에 추가하면 그 값이 그대로 들어가게 된다.
그래서 이것을 한번 암호화 하여 데이터베이스에 넣어주는 작업을 할것이다.

npm install bcrypt --save 를 이용하여 bcrypt를 다운받는다.


유저 정보들을 데이터 베이스에 저장하기전 암호화

Register Router에서 모든정보들을 모델에 넣어주고 save를하는데,
이 save를 하기전에 비밀번호를 암호화 한다.
그래기 위해서 User model에서 mongoose의 메서드인 userSchema.pre() 메서드를 이용한다.

위처럼 작성하여 model을 save하기 전에 비밀변호를 암호화하는 로직을 만들었다.
그리고 postman으로 테스트 했는데 통과가 안된다..


디버깅..

이유를 찾다가 위의 코드중에 const user = this로 들고오는 부분이있는데,
이 코드를 사용하는 콜백함수를 내가 Arrow function으로 만들었다.
일반 함수와 화살표함수는 this의 대상이 조금 다르기 때문에 우선 함수를 화살표에서 일반 선언함수로 변경해보고 시도를 해보았다.
하지만 이것도 실패... 내가 생각한것과 다른것 같다.

이렇게 저렇게 막 찾다보니 맙소사... 우선 두가지 큰 문제점을 찾았다.
첫번째 POSTMAN에서 요청을 보낼때 JSON이 아닌 TEXT로 보낸것이다.
위처럼 Text로 보내서 제대로된 에러조차 안나온것이였고..

두번째 스키마를 정의할때 비밀번호 최소길이를 50자로 해논것이다.. 5자를 실수로 50자로 넣어놨다 -_-...
이걸 5로 고친뒤 몽고디비로 들어가서 Users테이블을 삭제후 다시 실행을 시킨뒤
요청을 다시한번 날렸더니
성공적인 응답이 날라왔다... 허허

들어간 비밀번호 데이터를 보면 원래 플레인하게 숫자까지 싹다 나오게 된다.
하지만 암호화 메소드를 만들어 준뒤에는 추가를 하게 된다면,
응? 왜 암호화가 안되지... 뭐지?
디버깅을 위해 처음부터 흐름을 쭉 보았다. 에러가 안나는게 더욱더 나를 힘들게 하였는데,
우선 첫번째로.. nodemon을 사용안하다 보니 서버에서 변경된것을 인지 못하였다.
그리고 next를 호출하는 위치를 수정해주었다
주석되어있는 next위치를 해쉬가 처리되는 쪽으로 이동하고 다시한번 Postman을 날려보니

!!!! 잘 암호화가 된다 ㅠㅠㅠ 여러모로 어려운 작업이지만 익숙해지기고 적응만 된다면 금방금방 할 수 있을것 같다.

profile
Web Developer

0개의 댓글