[Node.js] password 암호화

페리·2021년 8월 30일
0

Nodejs에서 password를 그냥 텍스트로 저장하게 되면 보안에 취약하다고 한다. (그 이유는 나중에 차차 정리하기로)
그래서 bcrypt 라는 모듈을 적용해보기로 했다.

모듈 설치

npm install bcrypt

모듈 import

const bcrypt = require('bcrypt')

암호화


const password = '1234'
const encryptedPassowrd = bcrypt.hashSync(password, 10) // sync
const password = '1234'
bcrypt.hash(password, 10, (err, encryptedPassowrd) => {
  // async callback
})

암호화 활용

router.route("/add").post((req, res) => {
	bcrypt.hash(req.body.password, 10, (err, encryptedPassowrd) => {
		// async callback
		const one = {
			type: req.body.type,
			email: req.body.email,
			password: encryptedPassowrd,
		};
		const newUser = new User(one);
		newUser
			.save()
			.then(() => res.json("User added!"))
			.catch((err) => res.status(400).json("Error: " + err));
	});
});

복호화

const password = '1234'
const encodedPassword = '$2a$10$tUUfk1E0jGr90ntHxl/wE.lzrVvAQfxJ7nRo3RYXi2XqJtlv2h.UW'
const same = bcrypt.compareSync(password, encodedPassword) // sync
 

const password = '1234'
const encodedPassword = '$2a$10$tUUfk1E0jGr90ntHxl/wE.lzrVvAQfxJ7nRo3RYXi2XqJtlv2h.UW'
bcrypt.compare(password, encodedPassword, (err, same) => {
  // async callback
})

복호화 활용

router.route("/").post((req, res) => {
	User.findOne({ email: req.body.email }, (err, user) => {
		if (!user) {
			return res.json({
				loginToken: false,
				message: "아이디가 일치하지 않습니다.",
			});
		} else {
			bcrypt.compare(req.body.password, user.password, (err, same) => {
				// async callback
				if (same) {
					return res.json({
						loginToken: true,
						message: "로그인되었습니다!",
					});
				} else {
					return res.json({
						loginToken: false,
						message: "비밀번호가 일치하지 않습니다.",
					});
				}
			});
		}
	});
});

나는 react 프레임워크와 nodejs를 함께 사용했는데, 암호화, 복호화 모두 callback 함수가 있는 부분을 활용했다.

참고 사이트 : https://gofnrk.tistory.com/112

0개의 댓글