Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 루비
- 장고 공부하기
- node.js
- 홈페이지 개발하기
- 모닝버드
- Django
- express-mysql-session
- 웹프로그래밍
- rails review
- 모듈화
- 예스인테리어
- 장고
- Python
- 웹 프로그래밍 입문
- django 공부하기
- css3
- 루비 온 레일즈
- nodejs
- jquery
- 꿀팁
- 웹 프로그래밍
- 데스크탑애플리케이션
- rails
- nodejs api
- 파이썬 웹 프레임워크
- Ruby On Rails
- 웹 프론트엔드
- 프론트엔드
- 루비온레일즈
- 레일즈
Archives
- Today
- Total
노래하듯 이야기하고, 춤추듯 정복하라.
[Node.js API 개발] JWT 토큰을 활용한 데이터 변조 및 탈취 방지 본문
# JWT 토큰을 활용하여 로그인된 사용자 확인하기
## jsonwebtoken 모듈 설치 및 middleware 개발
1. 모듈 install
sudo npm i jsonwebtoken
2. middlewares => exports.verifyToken
// jwt
const jwt = require('jsonwebtoken');
exports.verifyToken = (req, res, next) => {
try {
req.decoded = jwt.verify(req.headers.authorization, process.env.JWT_SECRET)
return next();
} catch (err) {
if (err.name === 'TokenExpiredError') {
return res.status(419).json({
resultCode: 419,
meesage: "토큰 만료"
});
}
return res.status(401).json({
resultCode: 401,
message: "토큰이 유효하지 않습니다."
})
}
}
3. 토큰 사용 => router
1). 로그인 시 토큰 발행 ( *만료 시간 정해줄 것* )
// routes/auth.js
const express = require('express');
const { User } = require('../models'); // 모델 임포트
const { verifyToken } = require('./middlewares'); // 미들웨어 임포트
const jwt = require('jsonwebtoken') // 모듈 임포트
const router = express.Router();
// 로그인 라우터
router.post('/login', async (req, res, next) => {
const { email, password } = req.body;
if (사용자 데이터 유효성 체크) {
const user = User.findOne({ where: { email: email } })
const token = jwt.sign({
user_id: user.id,
email: user.email,
nick: user.nick
}, process.env.JWT_SECRET, {
expiresIn: '15m', // 유효기간 15분 => 15분 이후 토큰이 재발급 됨
issuer: 'nodebird',
});
return res.status(200).json({
resultCode: 200,
message: "토큰 발행, 로그인 성공",
token, // 발행된 jwt 토큰
})
} else {
res.status(404).json({
resultCode: 404,
message: "사용자 데이터가 유효하지 않습니다."
})
}
});
router.get('/confirm', verifyToken, (req, res, next) => {
res.json(req.decoded);
});
module.exports = router;
2) 사용자가 다른 라우터 접근시, 로그인 여부(유효한 사용자) 체크 하기
- verifyToken 미들웨어를 통하여 클라이언트에게 헤더로 전송받은 클라이언트의 토큰의 유효성을 체크한다.
- router
// verifyToken 미들웨어를 통하여 사전에 헤더로 전송받은 클라이언트의 토큰의 유효성을 체크한다.
router.get('/newPost', verifyToken, (req, res, next) => {
const { user_id } = req.body; // 세션에 저장해 놓은 user_id 받기
console.log(req.decoded);
if (user_id == req.decoded.user_id) {
res.status(200).json({
resultCode: 200,
message: "인증 성공"
});
}
});
'프로그래밍 > node.js' 카테고리의 다른 글
[Node.js API 개발] AWS S3 이미지 업로드, multer-s3 사용 (1) | 2019.05.29 |
---|---|
[Node.js API 개발] 로그인 상태 유지 & 자동 로그인 (0) | 2019.05.27 |
[Node.js API 개발] Node.js 모듈 사용 시 주의 할 점 (0) | 2019.05.27 |
session정보 mysql에 저장하기 & passport 인증 구현 (1) | 2018.01.06 |
node.js 비밀번호 보안(Security Password) - md5, sha256, pbkdf2 (0) | 2018.01.02 |
Comments