Backend
비밀번호
- DB에 저장되는 비밀번호는 평문으로 작성되면 안 된다.
- 암호화하여 저장해야 되는 것인데, 서버를 공격 시 평문으로 작성된 데이터를 쉽게 추출할 수 있기 때문에 비밀번호를 해싱하여 저장해야 한다.
bcrypt
라는 라이브러리를 통해 비밀번호를 해싱(암호화) 할 수 있다.- 암호화된 비밀번호로 저장되지만, 서버 사이드에 비밀번호가 수신될 때는 평문으로 자동 해석된다.
1
2
3
4
5
6
7
8
9
//npm install bcrypt @types/bcrypt
import bcrypt from "bcrypt";
const singupController = (req, res, next) => {
const { id, password } = req.body;
let hashPassword;
bcrypt.hash(password, salt);
};
- 해싱할 인자를 첫 번째 인자에 작성하고,
salt
에는 솔팅 횟수를 의미한다.- 무작위로 생성한 고유한 값을 추가하는 것을 말한다.
1
2
3
4
5
6
7
8
9
10
// login
const login = async (req, res, next) => {
const { id, password } = req.body;
const exitingUser = await User.findOne({ id });
// ...
let isValidPass = false;
isValidPass = await bcrypt.compare(password, existingUser.password);
};
- 해싱된 비밀번호를 해석하기 위해 우리가 찾은 저장된 유저의 비밀번호와 입력된 비밀번호의 해싱값을 비교한다.
- 불리언 값을 반환하는 프로미스를 반환한다.