본 포스팅은 John Ahn님의 유튜브 강의를 참고했습니다.
https://youtu.be/XonyJxSDoGE?si=h5cZ3SChsfjVEVxs
저번에 Postman으로 MongoDB에 데이터를 넘겼었는데
확인해보니 데이터가 없었습니다.
왜 그런가 살펴봤더니 URL에 문제가 있었습니다.
MongoDB의 주소 형식인데
제가 데이터베이스 이름을 입력하지 않았었습니다.
지금은 이렇게 Postman으로 데이터를 넘기면 잘 넘어옵니다.
저번 시간에는 MongoDB의 주소 비밀번호를 암호화 해봤는데요.
오늘은 Bcrypt라는 것을 이용해서 로그인 할 때 넘어오는 사용자의 비밀번호를
암호화 해보는 시간을 가지겠습니다.
먼저 npm i bcrypt --save를 터미널에 입력해서 설치해줍니다.
설치가 완료되면 Model 폴더 안에 있는 스키마 파일로 이동합니다.
Bcrypt를 사용하려면 기본 세팅을 해야하는데
Bcrypt 홈페이지에 방법이 나와 있습니다.
Bcrypt에서는 Salt라는 것을 이용해서 암호화를 진행합니다.
const bcrypt = require('bcrypt');
다운받은 bcrypt를 변수로 선언해 주고
const saltRounds = 10;
saltround라는 것을 만들어 줍니다.
이것은 암호화 하려하는 글자 수를 의미합니다.
bcrypt.genSalt(saltRounds, function(err, salt) {
bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
// Store hash in your password DB.
});
});
다음은 이런 코드를 넣어줘야 하는데
gensalt를 통해서 salt를 생성합니다.
이때 파라미터로 saltRounds와 callback함수가 들어갑니다.
코드 한줄을 추가하여 에러 여부를 확인할 수도 있습니다.
bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
// Store hash in your password DB.
});
암호화하는 hash함수인데 파라미터인 myPlaintextPassword는
암호화하려는 데이터를 의미합니다.
즉 저희는 비밀번호를 암호화해야 하기 때문에 password 데이터가 들어가면 됩니다.
password 데이터를 가져오는 방법은
자바 언어와 비슷한데 this라는 변수를 선언하면
이 파일 내의 변수에 접근할 수 있습니다.
즉, user.password는 이 스키마 내에 password에 접근하게 됩니다.
여기서 hash 파라미터는 암호화된 비밀번호 입니다.
주의할 점이 비밀번호 암호화는 비밀번호를 변경할 때만 이루어져야 하는데
아이디를 변경하거나 다른 작업을 할 때에도 비밀번호가 암호화 되면 곤란할 것 같습니다.
이 함수를 쓰면 그런 문제를 해결할 수 있습니다.
isModified함수는 password라는 파라미터가 변경될 때 내부 함수를 실행시켜 줍니다.
그래서 이 함수로 감싸주면
최종 코드가 완성됩니다.
이제 비밀번호가 암호화 되는지 확인해 볼까요?
Postman으로 이런 데이터를 넘겨보겠습니다.
password 부분이 암호화 되어서 들어온 것이 보이시나요?
오늘은 비밀번호 암호화 하는 bcrypt라는 모듈에 대해 알아보았는데요.
로그인 기능에 한 걸음씩 접근하고 있는게 뿌듯하게 느껴지네요.
감사합니다!
'Node.js' 카테고리의 다른 글
[Node.js] 로그아웃 기능 (0) | 2024.02.17 |
---|---|
[Node.js] Auth 기능 만들기 (0) | 2024.02.16 |
[Node.js] 로그인 기능 (0) | 2024.02.16 |
[Node.js, Git] 정보 암호화 및 관리 (0) | 2024.02.14 |
[Node.js] Nodemon 모듈 (0) | 2024.02.14 |