ํ๊ณ ์ถ์ ๊ฒ
๋ก๊ทธ์ธ๊ณผ์ ์์ ์์ฑ๋๋ JSONWEBTOKEN์ SECRET_KEY๋ฅผ "๋ณด์์ ์ง"๋ฅผ ์ํด ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ ํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํ
const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
require('dotenv').config(); //
const { Users } = require('../models');
API ์ค์
router.post('/login', async (req, res) => {})
Request Data
const { email, password } = req.body;
์์ธ์ฒ๋ฆฌ
// ์ ์ ํ์ธ
const user = await Users.findOne({ where: { email } });
if (!user) {
return res.status(409).json({ errorMessage: '์กด์ฌํ์ง ์๋ ๊ณ์ ์
๋๋ค.' });
}
// user์ ์ด๋ฉ์ผ๊ณผ ํจ์ค์๋ ํ์ธ
if (email !== user.email || password !== user.password) {
return res.status(409).json({ errorMessage: '์ด๋ฉ์ผ ๋๋ ํจ์ค์๋๋ฅผ ํ์ธํด ์ฃผ์ธ์.' });
}
JWT ์์ฑ
const token = jwt.sign({ user_id: user.user_id }, "customized-secret-key");
// ์ฌ๊ธฐ์ ์ฝ๋์์ ์์ฑ์ ์ฌ์ฉ๋ customized-secret-key ์ "ํ๊ฒฝ๋ณ์" ์ฒ๋ฆฌํ๊ณ ์ ํ๋ค.
"customized-secret-key" ์ ์ญํ
JWT ๊ตฌ์ฑ์์ ์ค SIGNATURE๋ถ๋ถ์ ์ฐจ์งํ๋ฉฐ, ํด๋น ํ ํฐ์ ์ด๋ฃจ๊ณ ์๋ ๋น๋ฐํค๊ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
์์ ์ํฌ๋ฆฟํค์ ๋ณด์์ด ์ ์ง๊ฐ ๋์ด์์ง ์๋ค๋ฉด, ๋ก๊ทธ์ธ ํ์ ๋น์์ ์์ฑ๋๋ token์ ํ์ทจ๋นํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ ๊ฒ ๋๋ฉด ๊ฐ์ธ์ ๋ณด ์ ์ถ ์ด์๊ฐ ์๊ธธ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํด๋น ์ํฌ๋ฆฟํค๋ฅผ ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ ํ๋ค.
ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌํ๊ธฐ
.ENV ํ์ผ ์์ฑ ๋ฐ ์ฝ๋ ์ธํ
Node.js ์์๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์์ค ์ฝ๋์์ ๋ถ๋ฆฌํ๊ธฐ ์ํด .env ํ์ผ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
1. .env ํ์ผ ์์ฑ
2. ์ฝ๋ ์ธํ
ํ๊ฒฝ๋ณ์ ์ธํ ์ key - value ์ ํํ๋ก ์ธํ ์ ์ค์ํด์ค์ผ ํ๋ค.
SECRET_KEY=customized-secret-key
// SECRET_KEY ๋ผ๋ ๊ฐ์ ๊ธฐ์กด์ ์ํฌ๋ฆฟํค์๋ customized-secret-key ๋ฅผ ๋ด์๋ค.
.env ํ์ผ ์ธํ ๋.
dotenv ํจํค์ง ์ค์น
npm i dotenv
// i ๋ install ์ ์ฝ์๋ก ๋ ๋ค ๋์ผํ ์ญํ ์ ํ๋ ๋ช
๋ น์ด์ด๋ค.
// package.json
"dependencies": {
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1", // ์ค์น ํ์ธ ์๋ฃ.
"express": "^4.18.2",
"jsonwebtoken": "^9.0.1",
"mysql2": "^3.5.1",
"nodemailer": "^6.9.3",
"sequelize": "^6.32.1"
},
"devDependencies": {
"nodemon": "^3.0.1",
"sequelize-cli": "^6.6.1"
}
require("dotenv").config()
ํด๋น ์ฝ๋๋ Node.js ํ๊ฒฝ์์ .env ํ์ผ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฝ์ด์ค๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฝ๋์
๋๋ค.
ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์์
ํ์ผ์์ ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌ์ ์ ํด๋น ์ฝ๋๋ฅผ ์คํ์์ผ์ค๋ค.
dotenvํจํค์ง๋ฅผ ๋ณ์๋ก ๋ฐ์์ ๋ณ์๋ค์ config()๋ฅผ ์คํ์์ผ๋ ๋๋ค.
const dotenv = require('dotenv');
dotenv.config();
process.env."ํ๊ฒฝ๋ณ์ KEY"
.env ํ์ผ์ ์ธํ ํ ํ๊ฒฝ๋ณ์๋ process.env ๊ฐ์ฒด๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
// jwt ์์ฑ
const token = jwt.sign({ user_id: user.user_id }, process.env.SECRET_KEY);
// ๊ธฐ์กด์ "customized-secret-key"๋ฅผ ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌํ key๊ฐ์ธ SECRET_KEY๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ ๊ฒ ํด์ ์ ์ ์ ๋ณด์ ๋ํด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ง๋ ์ํฌ๋ฆฟํค๋ฅผ ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌํ๋๊ฒ์ ์ฑ๊ณตํ๋ค.
์ค๋ ๊ณต๋ถํ ํ๊ฒฝ๋ณ์๋ฅผ ์ด์ฉํด์ ํ์ฌ ์ด์ฉ์ค์ธ DB์ ์ธํ ๊ฐ๋ ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
์๋๋ฉด, ๊ฐ๋ .gitignore์ config/ ๋ฅผ ํตํด์ ์ ์ธ๋ฅผ ์์ผ์ค์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ์ด github ์ commit ๋๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
์ด ๋ถ๋ถ์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ธํ ํ ํ๊ฒฝ๋ณ์๊ฐ์ผ๋ก DB์ธํ ์ ์งํํ๋ค๋ฉด ๊ฐ์ธ์ ๋ณด ๋ณด์์ ์ง์ ์ข์ ์ญํ ์ ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค ^^
#ํ๊ฒฝ๋ณ์ #ENV #์ํฌ๋ฆฟํค #๋ณด์์ ์ง
'CS > ๋ณด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] : ์ฟ ํค์ ์ธ์ (0) | 2023.08.28 |
---|---|
[๋ณด์] : CORS ? (0) | 2023.08.23 |