본문 바로가기
백엔드/NodeJs

[NodeJs] 비밀번호 해쉬 저장 하기 bcrypt

by jinwanseo 2021. 8. 5.
728x90

[NodeJs] 사용자 비밀번호 해쉬값으로 변환하여 저장하기 Bcrypt

 

 

⭐️ NodeJs 를 통하여 로그인 기능을 구현할때

아이디와 비밀번호 등의 사용자 정보를 서버에 저장하는데

이때 비밀번호를 암호화 하지않고 그대로 저장하는 것은 

범죄가 될 만큼 서버를 구성하는 프로그래머에겐 

사용자의 정보를 암호화 하여 저장하는 일은 필수이다

 

⭐️ 하지만 암호화라는 것을 그냥 네이티브하게 구현하기 위해서는

까다로운 면도 있고 안전성도 보장할수 없는데 이를위해

비밀번호 암호화를 간단하게 처리할수 있는 npm 모듈인

bcrypt를 소개하고자 한다

 

🌈 사용 예제

NodeJs (Express) 를 통한 로그인 RestfulAPI 내에서

회원가입시 사용자의 비밀번호 정보를 해싱하여 저장

로그인시 해쉬값과 입력한 비밀번호를 비교하여 인증

 

import express from 'express';
import helmet from 'helmet';
import cors from 'cors';
import bcrypt from 'bcrypt';

const app = express();
app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({extended:false}));

const users = [];

//회원가입
app.post('/join',async (req,res)=>{
    const {id, password, url} = req.body;
    const user = users.find(u=>u.id === id);
    if(!user) {
        const hashed = await bcrypt.hash(password,10);
        users.push({id,password:hashed,url});
        return res.status(200).json({
            msg : '회원가입 성공!',
            user : {
                id,hashed,url
            }
        });
    }else {
        return res.status(400).json({msg : '이미 같은 아이디가 존재합니다'});
    }
});


//로그인
app.post('/login',async(req,res)=>{
    const {id, password} = req.body;
    const user = users.find(u=>u.id === id);
    if(!user) {
        return res.status(400).json('아이디 없음');
    } else {
        const isEqualPw = await bcrypt.compare(password,user.password);
        console.log(isEqualPw);
        if(isEqualPw) 
            return res.status(200).json({msg : "로그인 성공!",user});
        else 
            return res.status(404).json({msg : "로그인 실패"});
    }
});

app.listen(8080,()=>console.log('http://localhost:8080'));

 

PS. 위 예제는 예제 결과 확인을 위해 서버 응답시 json 내에

사용자 비밀번호 해쉬 정보를 포함하는등 실제 로그인 RESTful API 구현시

하지말아야할(?) 내용을 포함하고, 데이터베이스가 아닌 서버 메모리를 사용하였으며

간단 예제를 위해 post 입력 값을 따로 가공하거나 검증하는 코드는 제외하였음 🤪

 

 

728x90

댓글