bcrypt
는 비밀번호를 안전하게 저장하기 위한 해싱 라이브러리입니다.
$2a$10$A4hKdXuPsN3uJBtsvm.iyeQ/7CyWiSz3xsMQgCzE.JNA4Ubo3o0lm
위 같은 형태로 해싱이 됩니다.2a 어떤 알고리즘을 쓰는지값
나머지는 중 반틈은 salt인데 랜덤으로 만드는 문자열,
단방향통신 - 인코딩은 가능하나 디코딩은 안됨
(사이트에서 비밀번호 찾기 하면 새로운 비밀번호로 변경하라는 이유)
사용예시
- 터미널 npm install bcryptjs 설치
import * as signupRepository from "../repository/signupRepository.js";
import bcrypt from "bcryptjs";
export async function signUp(req, res) {
let { id, pass, name, content } = req.body;
const hashPass = bcrypt.hashSync(pass, 10);
const params = [id, hashPass, name, content];
const result = await signupRepository.signUp(params);
if (result == "success") res.redirect("/dwitter");
}
2. 회원가입 폼에서 body에 붙어 오는 pass라는 비밀번호 값을 hashpass라는 변수로 할당합니다.
bcrypt.hashSync(불러온 비밀번호, salt값)으로 입력을 하는데 함수 두 번째 인자인 salt값은 8-10 정도가 적당합니다.
너무 많은 값을 입력하면 프로그램 돌아가는데 시간이 많이 걸립니다.
export async function login(id) {
return db
.execute("select pass from dwitter where id=?", [id])
.then((result) => result[0][0]);
}
3. 아이디 값에 맞는 비밀번호를 db에서 select 조회를 합니다.
import * as loginRepository from "../repository/loginRepository.js";
import bcrypt from "bcryptjs";
export async function login(req, res) {
let { id, pass } = req.body;
// db에 저장된 password 가져오기
const dpass = await loginRepository.login(id);
console.log(dpass);
// bycrypt.compare();
const result = await bcrypt.compare(pass, dpass.pass);
console.log(result);
}
4. 로그인 값을 불러올 때, bcrypt.compare() 함수를 사용해서 bcrypt.compare(유저가 로그인할 때입력한 값, 해싱된 db값)
을 비교해 줍니다.
그러면 result 값을 log로 찍어보면 true나 false 값을 반환하는데 조건문으로 분류하여 결과에 맞는 화면을 개발하면 됩니다.
설명
- bcrypt라이브러리 설치:
먼저 프로젝트 디렉터리에서bcrypt라이브러리를 설치합니다.(저는 npm install bcryptjs로 진행했습니다)
npm install bcrypt
비밀번호 해시화:
다음은 비밀번호를 해시화하는 예시 코드입니다.
const bcrypt = require('bcrypt');
const saltRounds = 10; // 솔트(salt) 라운드 수
const plainPassword = 'mySecurePassword'; // 해시화할 비밀번호
// 비밀번호 해시 생성
bcrypt.hash(plainPassword, saltRounds, (err, hash) => {
if (err) {
console.error('비밀번호 해시 생성 오류:', err);
return;
}
// 해시 생성 성공
console.log('생성된 해시:', hash);
// 이제 'hash'를 데이터베이스에 저장하면 됩니다.
});
위의 코드에서 bcrypt.hash함수를 사용하여 비밀번호를 해시화합니다. saltRounds는 해시에 사용할 솔트 라운드 수를 나타냅니다. 솔트는 해시를 보다 안전하게 만드는 데 도움을 주는 임의의 데이터입니다.
비밀번호 검증:
저장된 해시된 비밀번호를 검증하려면 bcrypt.compare함수를 사용합니다. 예시 코드는 다음과 같습니다.
위의 코드에서 bcrypt.compare함수를 사용하여 사용자가 제출한 비밀번호와 데이터베이스에서 가져온 해시된 비밀번호를 비교합니다. 결과가 true이면 비밀번호가 일치하고, false이면 불일치합니다.
'프로그래밍 > NodeJS' 카테고리의 다른 글
aws s3 이미지 업로드 (0) | 2023.11.15 |
---|---|
spa로 페이지 구성하기 (0) | 2023.10.30 |
node.js환경에서 mysql 연동 세팅하기 (1) | 2023.10.23 |
method-override (0) | 2023.10.05 |
자바스크립트 문법을 이용한 nodejs router 연습문제 (0) | 2023.10.04 |