11월 3일 수업 내용 - Node.js - Git / Day06
1. Validation
- 프로젝트 및 코드 유효성 검사
- 코드의 구문 및 논리적 오류를 식별하고 프로젝트 설정 및 환경 검사도 수행할 수 있음
import express from 'express'
import {body,param, validationResult} from 'express-validator'
- 먼저 터미널에서 "express-validator" 와 "express" 를 다운로드 받음
- package.json 에 "express-validator" 와 "express" 이 다운받아 있는지 확인한 후 활용하고자 하는 js 파일에 import 를 설정
- 위의 설정을 통해 "express" 와 " express-validator" 모듈을 활성화 함
const app = express()
app.use(express.json())
- 변수 app 에 express 모듈 생성하고 json 요청 본문을 읽을 수 있도록 설정
const validate = (req, res, next) => {
const errors = validationResult(req);
if(errors.isEmpty()){
return next();
}
return res.status(400).json({ message: errors.array()[0].msg });
}
- 변수 validate 에 함수를 정의하는데 "validationResult" 를 사용하여 요청되는 값의 유효성을 검사
- 검사 결과가 유효하면 받은 내용을 return 하고 요류 발생 시 오류코드 400과 설정해 놓은 오류 메세지를 응답
app.get('/:email', [
param('email')
.isEmail()
.withMessage('이메일을 입력하세요!'), validate]
,(req, res, next) => {res.send(':연애편지:');});
app.post('/users',[
body('name')
.trim()
.isLength({min:2})
.withMessage('이름은 두글자 이상으로 입력')
,body('age')
.isInt()
.withMessage('나이는 숫자로 입력')
,body('email')
.isEmail()
.withMessage('이메일을 입력')
,body('job.name')
.notEmpty(),validate]
,(req,res,next)=>{console.log(req.body);res.sendStatus(201)})
app.listen(8080)
- app.get 으로 받아서 postman 으로 확인했을 때 요청받은 "email" 의 값이 위의 검사에서 유효하다면 받은 내용을 그대로 return
- 유효하지 않을시 ".withMessage" 를 송출
- 마찬가지로 app.post 로 받아서 postman 으로 확인했을 때 요청받은 "name", "age", "email", "jop.name" 의 값이 위의 검사에서 유효하다면 받은 내용을 그대로 return
- 유효하지 않을시 ".withMessage" 를 송출
2. Bcrypt
- 비밀번호 해싱과 비밀번호 검증을 수행하기 위한 라이브러리
- 비밀번호 보안을 향상시키고 사용자 데이터를 안전하게 저장하는 데 사용
const bcrypt = require('bcrypt')
or
import bcrypt from bcrypt
- 먼저 터미널에서 " bcrypt " 를 다운로드 받음
- 변수에 require 을 설정해 주거나 import 를 설정해서 사용
const password = 'abcd1234'
const hashed = bcrypt.hashSync(password,10) // password 뒤의 숫자는 암호화의 레벨, 대게 8~12 를 사용
console.log(`password:${password},hashed:${hashed}`);
// abcd1234
// $2b$10$nikn8UZqfee8u0wgZAqj3e9HTElNvH5ckI6OSlyabmKF0niu9OXS.
- 먼저 변수에 임의로 비밀번호를 입력해주고 hashSync 함수를 이용해서 비밀번호를 암호화 처리
- abcd1234 의 암호화 결과값으로 변환
const result = bcrypt.compareSync('abcd1234',hashed)
console.log(result);
- 암호화된 비밀번호는 compareSync 함수로 해석가능
- hashSync , compareSync 함수 모두 동기화 된 함수 이며 비동기화 상태에서 이용하게 되면 await ~~ hash, await ~~ compare 로 사용 가능
3. JWT (JSON Web Token)
- 웹 애플리케이션과 서비스 간에 정보를 안전하게 전달하기 위한 인증 및 권한 부여 매커니즘을 구현하는 데 사용되는 표준화된 방법 중 하나
- JSON 포멧을 사용하여 정보를 표현하며, 서명 및 암호화를 통해 정보의 무결성을 보장
- { Header | Payload | Signature }
- Header : 토큰 유형 및 서명 알고리즘과 같은 메타데이터가 포함
- Payload : 토큰에 포함될 데이터가 들어있는 부분
- Signature : 헤더, 페이로드 및 비밀 키를 사용하여 생성된 서명으로 토큰의 무결성을 검증하는 데 사용
const jwt = require('jsonwebtoken')
const secret = 'abcdefg1234%^&*'
const token = jwt.sign(
{
id:"apple",
isAdmin:false
},
secret,
{ expiresIn: 3 }
)
setTimeout(()=>{
jwt.verify(token,secret,(error,decodeed)=>{
console.log(error,decodeed);
})
}, 2000)
console.log(token);