๐ช next()
const validate = (req, res) => {
const err = validationResult(req)
if (!err.isEmpty()) {
return res.status(400).json(err.array())
}
}
์ง๋๋ฒ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๋ฉด์ ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ์ ๋ก์ง์ ๋ชจ๋๋ก ๋ถ๋ฆฌ์์ผฐ๋๋ฐ
์๋ฌ๊ฐ ๋์ง ์์ ๊ฒฝ์ฐ ๋ฌดํ ๋ก๋ฉ ์ํ์ ๋น ์ง๊ณ ๋ง์๋ค.
express์ ์ฅ์์๋ validate์์ ์ต์ข ์๋ต์ ํด์ฃผ๋๊ฒ ์๋๊ฐ?๋ผ๊ณ ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์
์ต์ข ์๋ตํ๋ ๊ณณ์ด ์๋๋ผ๋ฉด ๋ค์์ผ๋ก ๋์ด๊ฐ๋ผ๊ณ ์๋ดํด์ฃผ์ด์ผ ํ๋ค.
express์ ๋งค๊ฐ๋ณ์๋ก ์ฌ ์ ์๋ ๊ฒ์๋ req, res๋ง๊ณ next๋ ์กด์ฌํ๋ค.
const validate = (req, res, next) => {
const err = validationResult(req)
if (err.isEmpty()) {
return next(); // ๋ค์ ํ ์ผ(๋ฏธ๋ค ์จ์ด, ํจ์)๋ก ์ด๋
} else {
return res.status(400).json(err.array())
}
}
๋งค๊ฐ๋ณ์์ next๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ ์๋ฌ๊ฐ ์๋ค๋ฉด ๋์ด๊ฐ๋๋ก ํด์ฃผ์๋ค.
validate ๋ฏธ๋ค์จ์ด : ์ต์ข ์๋ต์ ๋ณด๋ด๋ ์ญํ X ๐๐ป next() ํธ์ถํด ๋ค์ ๋จ๊ณ ์งํ
http Method : ์ต์ข ์๋ต์ ์ง์ ๋ณด๋ด๋ ๊ณณ ๐๐ป ๊ตณ์ด next()๋ก ๋๊ธธ ํ์ X
๐ JWT
๋ก๊ทธ์ธ์ ํ๋ ๊ณณ์์ ์ข ์ข "์ธ์ ์ด ๋ง๋ฃ๋์์ต๋๋ค." ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ณด๊ฒ๋๋ค.
์ด๋ ๋ก๊ทธ์ธ์ ์ ์งํ ์ ์๋ ๊ธฐ๊ฐ์ด ์ง๋ ์๋์ผ๋ก ๋ก๊ทธ์์๋์๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ก๊ทธ์ธํ๋ผ๋ ๋ฌธ์ ์ด๋ค.
์ฆ, ์ฌ๊ธฐ์ ๋งํ๋ ์ธ์ฆ์ด๋ผ๋ ๊ฒ์ ๋ก๊ทธ์ธ์ด๋ผ๊ณ ์๊ฐํด๋ณผ ์ ์๋ค.
์ธ์ฆ๊ณผ ์ธ๊ฐ
์ธ์ฆ (= ๋ก๊ทธ์ธ) Authentication
- ๊ฐ์ ๋ ์ ์ ๋ผ๋ ๊ฒ์ ํ์ธํ๊ธฐ ์ํ ๊ฒ
- ๊ด๋ฆฌ์๋ ๊ณ ๊ฐ์ด๋ ์ธ์ฆ์ ํตํด ์ฌ์ดํธ์ ๊ฐ์ ๋ ์ฌ์ฉ์๋ผ๋ ๊ฒ์ ์ฆ๋ช ํ๋ ๊ฒ
์ธ๊ฐ Authorization
- ๊ฐ์ ์ฌ์ดํธ์ฌ๋ ๊ด๋ฆฌ์๋ ๊ณ ๊ฐ์ด๋์ ๋ฐ๋ผ ์ ๊ทผํ ์ ์๋ ํ์ด์ง์ ์ฐจ์ด ์กด์ฌ
- ์ธ์ฆ ํ, ํด๋น ํ์ด์ง์ ์ ๊ทผ ๊ถํ์ด ์๋์ง ํ์ธํ๋ ๊ฒ
์ฟ ํค์ ์ธ์
์ฟ ํค Cookie
- ์น ์๋ฒ์ ์ํด ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ ์ฅ๋๋, ์ด๋ฆ์ ๊ฐ์ง ์์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ
- ํฌ์ถ ์ฟ ํค์ฒ๋ผ ์ฟ ํค ์์ ๋ด์ฉ๋ฌผ(์์ด๋, ๋ก๊ทธ์ธํ ์์ ๋ฑ)์ ๋ด์ ๋ค๋๋ฉฐ ์๋ฒ์ ์ฃผ๊ณ ๋ฐ๋๋ค.
- ์ฅ์
- ์๋ฒ๊ฐ ์ ์ฅ์ ํ์ง ์์ผ๋ ์๋ฒ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค
- ์๋ฒ๊ฐ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค = Stateless = REST(ful)
- ๋จ์
- ์ค๊ฐ์ ๋๊ฐ ๊ฐ๋ก์ฑ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ทจ์ฝ
์ธ์ Session
- ์ธํฐ๋ท ์๋ฒ์์ ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ์ํธ์์ฉํ ๋ ์์ฑ๋๋ ์ผ์์ ์ธ ์ํ ์ ๋ณด
- ์ค์ํ ์ ๋ณด๋ ์๋ฒ(๊ธ๊ณ )์ ์ ์ฅํด๋๊ณ ์ธ์ ๋ฒํธ(๊ธ๊ณ ๋ฒํธ)๋ง ๊ฐ์ง๊ณ ์ฃผ๊ณ ๋ฐ๋๋ค.
- ์ฅ์
- ๋น๊ต์ ๋ณด์์ด ์ข๋ค (๊ธ๊ณ ๋ฒํธ ํธ๋ฆฌ๋ฉด ์ด๊ฒ๋ ...)
- ๋จ์
- ์๋ฒ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ ์ฅ๊ณต๊ฐ์ ์ฌ์ฉ => Stateless ํ์ง ๋ชปํ๋ค
์๋ก ์ฅ๋จ์ ์ด ๊ต์ฐจ๋์์ ๋ฟ ํด๊ฒฐ๋์ง ๋ชปํ๋ค.
์๋ก์ ๋จ์ ๋ค์ ๋ณด์ํ์ฌ ํ์ํ ๊ฒ์ด ๋ฐ๋ก JWT์ด๋ค.
JWT (Json Web Token)
Jsonํํ(JS ๊ฐ์ฒด ํํ)์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํด ์น์์ ์ฌ์ฉํ๋ ํ ํฐ
ํ ํฐ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ "์ฆ๋ช "์ ํ๊ธฐ ์ํ ์๋จ
- ์ธ์ฆ์ฉ : ์ ์ฅ ๊ฐ๋ฅํ ์ ์ ์ธ์ง ํ๋จ
- ์ธ๊ฐ์ฉ : ๊ด๋ฆฌ์์ธ์ง ์ผ๋ฐ ์ ์ ์ธ์ง ๊ถํ ํ๋จ
์ฅ์
- ์ํธํ๊ฐ ๋์ด ๋ณด์์ ๊ฐํ๋ค
- ์๋ฒ๊ฐ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค = Stateless = HTTPful
- ์๋ฒ์ ๋ถ๋ด์ ์ค์ฌ ์ค ์ ์๋ค
๐ง ๊ตฌ์กฐ
๊ทธ๋ผ JWT๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ณต์ ํํ์ด์ง๋ฅผ ํตํด ํ์ธํด๋ณด์.
JSON Web Tokens - jwt.io
JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signature (JWS).
jwt.io
์ผ์ชฝ์ด ์ํธํ๋ ํ ํฐ์ด๊ณ ์ค๋ฅธ์ชฝ์ ๋ณตํธํ๋ ํ ํฐ์ด๋ค.
HEADER
- ํ ํฐ์ ์ํธํํ๋๋ฐ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ, ํ ํฐ์ ํํ(๋ณดํต JWT)
- HS256์ ์ํธํํ๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋
PAYLOAD
- ์ฌ์ฉ์ ์ ๋ณด
- ์ด๋ฆ, ๋ก๊ทธ์ธํ ์์ , ๊ถํ ๋ฑ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ธฐ ์ํด ์ ๋ ์ ๋ณด
- ๋น๋ฐ๋ฒํธ๋ ์ฌ๊ธฐ์ ์ ๋ด์ง ์๋๋ค
VERIGY SIGNATURE
- ๋ง์ฝ ํ์ด๋ก๋์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ์ด ์๋ช ๊ฐ๋ ํจ๊ป ๋ณ๊ฒฝ
- ๋๊ตฐ๊ฐ ์ ์์ ์ผ๋ก ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋คํ๋๋ผ๋ ์๋ช ๊ฐ์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ธ์ X
๐ ์ ์ฐจ
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ์์ฒญ
- POST /login
- HTTP body (userName, password)
2. ์๋ฒ๋ ๋ด๋ถ ๋ก์ง์ ํ์ธ ํ JWT(ํ ํฐ) ๋ฐํ
- ์ธ์ ๋ก๊ทธ์ธ์ ํ๋์ง = JWT ๋ฐํ ์์
3. ๋ก๊ทธ์ธ ์ฑ๊ณต
- ๋ก๊ทธ์ธ ์ฑ๊ณตํ์ผ๋ ๋น๋ถ๊ฐ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์ง
- JWT ๋ฐํํด์ฃผ๊ณ ๊ทธ ์ดํ๋ก JWT๋ฅผ ๊ฐ์ ธ์ค๋๋ก ํ๋ค
- ์๋ฒ๋ ํด๋น ์ ๋ณด๋ฅผ ์ ์ฅํด๋์ง ์๊ณ ์ดํ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ธ์ฌ ๋ ์์ ์ด ํ ์๋ช ์ธ์ง ํ์ธ ํ ๋ง์ผ๋ฉด ๋ค์ฌ๋ณด๋ด์ค๋ค
4. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ค๋ฅธ ์์ฒญ
- HTTP header์ JWT๋ฅผ ๋ค๊ณ ๋ค๋ฅธ ์์ฒญ (= ๋ ์ด๋ฏธ ์ธ์ฆ๋์ผ๋ ๋ก๊ทธ์ธ ์ํด๋ ๋๊ฒ ์ง?)
5. ์๋ฒ๋ ์์ ์ด ํ ์๋ช ์ด ๋ง๋ ์ง ํ์ธ
- ์์ ์ ์๋ช ์ด ๋ง์ผ๋ฉด ์์ฒญ ์ํ, ์๋๋ฉด ์ํ X
โจ๏ธ ๊ตฌํ
npm instal jsonwebtoken
jsonwebtoken
JSON Web Token implementation (symmetric and asymmetric). Latest version: 9.0.2, last published: 2 years ago. Start using jsonwebtoken in your project by running `npm i jsonwebtoken`. There are 32795 other projects in the npm registry using jsonwebtoken.
www.npmjs.com
var jwt = require('jsonwebtoken');
var token = jwt.sign({foo : 'bar'}, 'shhhh');
JWT๋ชจ๋์ ์ํํด token์ ์์ฑํ์๋ค.
์ฌ๊ธฐ์ sign์ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. payload
2. secretOrPrivateKey
3. options
JWT๋ฅผ ๊ทธ๋ฅ ์ํธํ ์๊ณ ๋ฆฌ์ฆ๋ง์ผ๋ก ํ๊ธฐ์ ํน์ ๋ชจ๋ฅผ ์ํฉ์ ๋๋นํ์ฌ ๋๋ง์ ์ํธํค๋ฅผ ์ถ๊ฐํ๋๋ก ๋์ด์๋ค.
๊ทธ๋์ ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด 'shhhh'๊ฐ ๋ด๊ฐ ์ค์ ํ ์ํธ๊ฐ์ด ๋๋ค.
์ฝ์๋ก ์ฐ์ด๋ณด๋ ํ ํฐ์ด ์ ์์ฑ๋๊ณ ์๋ค.
๊ทธ๋ผ ์ด ํ ํฐ์ JWT ํํ์ด์ง์์ ๋ค์ ๋ณตํธํ ํด๋ณด์.
์ฐ์ธก PAYLOAD์ ๋ด๊ฐ ์ค์ ํ bar๊ฐ ์ ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ iat์ issued at์ ์ฝ์๋ก ๋ฐ๊ธ๋ ์๊ฐ์ ์ด๋ก ํํํ ๊ฐ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํ๋จ์ Invalid Signature๋ผ๊ณ ๋ฌ๋ค.
๋ด๊ฐ ์ถ๊ฐํ ์ํธํค๋ฅผ ๋ฃ์ด์ฃผ์ง ์์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์ผ๋ VERIFY SIGNATURE์ ๋ด ์ํธํค๋ฅผ ๋ฃ์ด์ค๋ณด๊ฒ ๋ค.
๊ทธ๋ฌ์ Signature Verfied๋ก ๋ฐ๊ผ๋ค !
๊ทธ๋ผ ๋งค๋ฒ ์ด ์ฌ์ดํธ์์ ์์ ํ์ธํด์ผํ๋?
ํด๋น ๋ชจ๋์ ๊ฒ์ฆํ๋ ์ฝ๋๋ ์๋ค.
var decoded = jwt.verify(token, 'shhhh');
ํ ํฐ๊ณผ ์ํธํค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฃผ๋ฉด PAYLOAD๊ฐ์ด ๋ฐํ๋๋ค.
โ๏ธ .env
๋ช ์์ด ์ํธํค์ธ๋ฐ ์ ํ์ผ์ด ๊นํ๋ธ์ ์ฌ๋ผ๊ฐ๋ค๋ฉด? ๋ง์ฒํ์ ๋ค ๊ณต๊ฐ๋๋ ๊ฒ์ด ์๋๊ฐ
์๋ฌด๋๋ ํด๋น ๊ฐ์ ๋ณ๋๋ก ๋นผ์ฃผ๊ณ ๊นํ๋ธ์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ ๊ฒ ๊ฐ๋ค.
.env๋ enviornment์ ์ฝ์๋ก ํ๊ฒฝ ๋ณ์ '์ค์ ๊ฐ' ์ด๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ค.
๊ฐ๋ฐ์ ํ๋ค DB๊ณ์ ์ด๋ ์ํธํค์ฒ๋ผ ์ธ๋ถ์ ์ ์ถ๋๋ฉด ์๋๋ ์ค์ํ ํ๊ฒฝ๋ณ์๋ค์ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ํ์ผ์ด๋ค.
ํ๊ฒฝ ๋ณ์ ํ์ผ์ด๋ค ๋ณด๋ ํ๋ก์ ํธ ์ต์์ ํจํค์ง์ ์์นํ๋๋ก ํด์ผํ๋ค.
โ ์ ์ถ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์ .gitignore์ ๋ฐ๋์ ์ถ๊ฐํด ๊นํ๋ธ์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ํด์ผํ๋ค.
.env์ ์๋ ๋ณ์๋ค์ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ชจ๋๋ ์๋ค.
npm i dotenv
dotenv
Loads environment variables from .env file. Latest version: 16.4.7, last published: 3 months ago. Start using dotenv in your project by running `npm i dotenv`. There are 53251 other projects in the npm registry using dotenv.
www.npmjs.com
๐ก .envํ์ผ์์ ๋๋ฌธ์ + ์ค๋ค์ดํฌ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ฃผ์์ #์ ์ฌ์ฉํ๋ค.
PRIVATE_KEY = 'shhhh' # JWT ์ํธํค
์์ ์ฌ์ฉํ๋ ์ํธํค๋ฅผ .env ํ์ผ์ ์ถ๊ฐํ๊ณ
var dotenv = require('dotenv');
dotenv.config(); // dotenv ์ค์ ์ฌ์ฉํ ๊ฑฐ๋ผ๊ณ ์ ์ธ
var token = jwt.sign({ foo : 'bar'}, process.env.PRIVATE_KEY);
์ฌ์ฉํ ๋ dotenv๋ชจ๋์ ๋ถ๋ฌ์ ํด๋น ์ค์ ์ ์ฌ์ฉํ ๊ฑฐ๋ผ๋ ์ ์ธ์ ํด์ค ๋ค
process.env.๋ณ์๋ช ์ผ๋ก ๋ถ๋ฌ์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
๐ช ์ฟ ํค Cookie
๊ทธ๋ผ ๋ก๊ทธ์ธํ ๋ ๋ฐ์ํ๋ ํ ํฐ์ ์ด๋์ ๋ค์ ์ฃผ๋ ๊ฒ์ด ์ข์๊น
res์ ๋ด์ ์ฃผ๊ธฐ์๋ ํ๋ก ํธ์๊ฒ ์ ๋ฌํด์ฃผ๋ ๋ด์ฉ๊ณผ ๊ฒน์น๋ ์ฟ ํค์ ๋ด์์ฃผ๋๋ก ํ์.
cookie-parser
Parse HTTP request cookies. Latest version: 1.4.7, last published: 5 months ago. Start using cookie-parser in your project by running `npm i cookie-parser`. There are 9317 other projects in the npm registry using cookie-parser.
www.npmjs.com
๊ทธ๋ฅ ์ฟ ํค์ ๋ด์์ฃผ๋ ๊ฒ์ ๋ฐ๋ก ๋ชจ๋์ด ํ์ํ์ง ์์ง๋ง
์ถํ req์์ ์ฟ ํค๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ ๋, ์ฟ ํค์ ์๋ ๋ด์ฉ์ ํ์ธํด์ ์ฌ์ฉํด์ผ ํ ๋์๋ parser๊ฐ ํ์ํ๋ค
๋ด๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค.
res.cookie("token", token);
res.cookie์ ๋ด์์ฃผ๋ฉด ๋๋๋ฐ ์ฟ ํค์๋ ๋ค์ํ ๊ฐ๋ค์ด ๋ด๊ฒจ์์ ์ ์๊ธฐ ๋๋ฌธ์
์ ํํ ๋ฌด์์ธ์ง ํจ๊ป ์์ฑํด์ ๋ณด๋ด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ผ ์ด์ body๊ฐ ์๋ cookie์ ํ ํฐ์ด ๋ด๊ฒจ์ ธ ์จ๋ค.
์ฌ๊ธฐ์ ๋ ํ์ธํด๋ด์ผํ ์ค์ ๋ค์ด ์๋๋ฐ ๋ฐ๋ก ์ฐ์ธก์ ์๋ HttpOnly๋ Secure์ด๋ค.
HttpOnly
- ํ๋ก ํธ์๋๊ฐ ์๋ APIํธ์ถ๋ง ํ๋ฝํ ๊ฒ์ธ์ง
- false ๐๐ป ํ๋ฉด๋จ์ ๊ณต๊ฒฉ(XSS๊ณต๊ฒฉ)์ด ๋ค์ด์ค๋ฉด ์ฟ ํค๋ ํจ๊ป ๊ณต๊ฒฉ ๋ฐ์
- true ๐๐ปhttpAPI๋ก๋ง ์์ฒญ์ ๋ฐ๊ธฐ ๋๋ฌธ์ XSS๊ณต๊ฒฉ์๋ ๋ฐ์ํ์ง ์์
Secure
- HTTPSํ๊ฒฝ์์ ๋ณด๋ผ ๊ฒ์ธ์ง HTTPํ๊ฒฝ์์ ๋ณด๋ผ ๊ฒ์ธ์ง
- HTTPS์ S๊ฐ Secure์ ์ฝ์
- false ๐๐ป HTTP
- true ๐๐ป HTTPS
์ด๋ฐ ์ค์ ๊ฐ์ ์์ ์ฟ ํค์ ๋ด์์ฃผ๋ ๊ฒ ๋ค์ ํจ๊ป ์์ฑํด์ฃผ๋ฉด ๋๋ค.
res.cookie("token", token, {httpOnly : true});
โ JWT ์ ํจ๊ธฐ๊ฐ
ํ ํฐ์ ๋ฐ๊ธํด์ฃผ๊ณ ๊ธฐ๊ฐ์ ์ ํด์ฃผ์ง ์๋๋ค๋ฉด ์์ํ ๋ก๊ทธ์ธ ์ํ๊ฐ ์ ์ง๋ ๊ฒ์ด๋ค.
๊ณต๊ณต์ฅ์์์ ๊น๋นกํ๊ณ ๋ก๊ทธ์์์ํ๋ฉด ์ ๋ง ์์ฐํ ์ํฉ์ด ํผ์ณ์น๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ๋ฐ๊ธํ ๋์๋ ์ด๋ ๊ธฐ๊ฐ๋์๋ง ์ ํจํ ๊ฒ์ธ์ง ์ค์ ํด์ฃผ์ด์ดํ๋ค.
const token = jwt.sign({
email : loginUser.email,
name : loginUser.name
}, process.env.PRIVATE_KEY, {
expiresIn : '30m', // 30๋ถ ๋ค ๋ง๋ฃ
issuer : "mingyeong" // ํ ํฐ ๋ฐํ์
});
ํ ํฐ ๋ฐ๊ธํด์ฃผ๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ต์ ์ผ๋ก ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
์ ํจ ๊ธฐ๊ฐ๊ณผ ๋๋ถ์ด ๋๊ฐ ๋ฐํํด ์ฃผ์๋์ง๋ ํจ๊ป ์ถ๊ฐํด์ค ์ ์๋ค.
์ค์ ํด์ค ๊ธฐ๊ฐ๋งํผ ์ ํจ๊ธฐ๊ฐ์ด ์ฐํ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
'๐๏ธ DevCourse > Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] Week 7 ํ๋ก์ ํธ ๊ด๋ฆฌ ์๋ฃจ์ ๋ณ ํน์ง (2) | 2025.03.10 |
---|---|
[TIL] Week 7 ํ๋ก์ ํธ 2. ๋์ ํ๋งค ์ฌ์ดํธ API ์ค๊ณ (1) | 2025.03.06 |
[TIL] Week 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค CLI (0) | 2025.02.25 |
[TIL] Week 6 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์์ฑ (0) | 2025.02.24 |
[TIL] Week 5 ๋ฐฑ์๋ ๊ธฐ์ด ๋ง๋ฌด๋ฆฌ (Router, Rename, API ์ค๊ณ ์์ ) (0) | 2025.02.21 |