728x90
[NodeJs] 사용자 정보를 JWT를 통해 인증하기 Json Web Token
⭐️ NodeJs로 서버를 열고 로그인을 구현하면서
사용자 인증을 하는 방법은 쿠키나 세션을 사용 하는 법 등
다양한 방법이 있는데, 최근 많이 사용하고 있는
JWT (Json Web Token)를 통해 NodeJs Express 환경에서
로그인 RestAPI를 구현하면서 토큰을 통한 사용자 인증을
예제를 통해 알아보기로 한다
⭐️ 구동 로직
Express를 통한 로그인 Rest API 내
JWT (Json Web Token) 모듈을 이용한
사용자 인증 방식
🌈 로그인 예제
회원 가입 : 비밀번호 암호화 및 회원 정보 토큰생성하여
클라이언트에게 json 전송
(비밀번호 암호화는 bcrypt 모듈 사용, 하단 링크 참조)
https://goodmemory.tistory.com/137
로그인 : 클라이언트 헤더 내 토큰을 통하여
회원 인증하여 회원 정보 출력
import express from 'express';
import helmet from 'helmet';
import cors from 'cors';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
const app = express();
app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({extended:false}));
const users = [];
//JWT 토큰 생성시 필요한 Secret키,
//원하는 Secret 키로 변경 가능
const jwtSecret = 'JsonWebTokenSecret';
//회원가입시
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);
//클라이언트 측으로 부터 받은 회원 정보 저장
const newUser = {
id, password:hashed,url
};
users.push(newUser);
//저장된 회원정보 JWT를 통해 Token 생성
const newUserToken = jwt.sign({id,url},jwtSecret,{
expiresIn : 60 * 60 //60초 * 60 이므로, 1시간 유효한 토큰 발급
});
//Json 응답을 통해 메시지와 JWT를 통해 생성한 토큰 전달
return res.status(200).json({
msg : '회원가입 성공!!',
token : newUserToken
});
}else {//이미 가입된 정보가 존재할때 (msg)
return res.status(400).json({msg : '이미 같은 아이디가 존재합니다'});
}
});
//회원 인증
app.get('/me',(req,res)=>{
//클라이언트 요청시 헤더값에 포함된 토큰값 분석
let auth = req.get('Authorization');
const userToken = auth.split(' ')[1];
//토큰을 통해 회원 인증
jwt.verify(userToken,jwtSecret,(err,encode)=>{
if(err) console.error(err);
else {
console.log(encode);
}
});
});
//로그인
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 해당 예제는 JWT의 사용 예시를 나타내기 위해
클라이언트 측의 데이터를 가공하거나 검증하는 코드가 추가되지 않았음
JWT는 State가 없는 대신 Json을 통해
회원 정보를 주고 받고 인증하기 때문에
꼭 필요한 정보만 최소화 하여 가공할것!
728x90
'백엔드 > NodeJs' 카테고리의 다른 글
[NodeJs] 비밀번호 해쉬 저장 하기 bcrypt (0) | 2021.08.05 |
---|---|
[NodeJs] Express 서버에서 손쉽게 유효성 검사하기 express-validator (0) | 2021.08.03 |
[NodeJs] 모듈 (export, require) (0) | 2021.07.26 |
[NodeJs] npm 특정버전 / 이전버전 / 원하는버전 설치 하기 (1) | 2021.06.09 |
[NodeJs] 구글 아이디로 로그인 하기 구현 (이메일 등 정보 받아오기) (0) | 2021.05.08 |
댓글