๐ Session ?
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ data ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ํน์ ์ ์ฅ ๊ณต๊ฐ์ ์๋ฏธํ๋ค.
session ์ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ํ ์์ ๋ถํฐ ์ข ๋ฃํ๋ ์์ ๊น์ง ์ ์ง๋๋ค.
๐ Session-based Authentication ๋์ ๊ณผ์ ?
๐ express-session ๋ชจ๋
// express-session ๋ชจ๋
const express = require('express');
const session = require('express-session');
const app = express();
app.use(
session({
secret: ,
resave: ,
saveUninitialized: ,
.
.
.
cookie: {
domain: ,
path: ,
maxAge: ,
sameSite: ,
httpOnly: ,
secure: ,
.
.
.
}
})
);
์๋ฒ๋ฅผ ์์ฑํ๋ฉด์ session ๋ฏธ๋ค ์จ์ด๋ฅผ ์ฝ์ ํด์ฃผ๋ฉด, ์๋ฒ ์ธก์ data ๋ฅผ ์ ์ฅํ ์ ์๋ session ์ด ์์ฑ๋๋ค.
// controller/users/login.js
// DB์์ ๋ถ๋ฌ์จ Users TABLE
const { Users } = require('../models'); // (model/index.js)
module.exports = {
post: async (req, res) => {
// Users ํ
์ด๋ธ์์ ์์ฒญ๊ณผ ์ผ์นํ๋ ์ ๋ณด๋ฅผ query ํด์จ๋ค.
const userInfo = await Users.findOne({
where: { userId: req.body.userId, password: req.body.password },
});
if(!userInfo){
// ๋ฑ๋ก๋ ํ์์ด ์๋๋ผ๋ฉด ์ ๊ทผ ๋ถ๊ฐํ๋ค๊ณ ์๋ ค์ค๋ค.
res.status(401).send({ data: null, message: 'not authorized' });
}
else{
// ๋ฑ๋ก๋ ํ์์ด๋ผ๋ฉด ์ธ์
์ ์ธ์
์์ด๋ ๊ฐ์ ๋ฃ์ด์ค๋ค.
// ์ฌ๊ธฐ์ ์ธ์
์์ด๋๋ฅผ ๊ทธ๋ฅ ์ผ๋ฐ ๊ฐ์ผ๋ก ๋๊ฒจ์คฌ์ง๋ง, ์ํธํํด์ ๋๊ฒจ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
req.session.session_id = userInfo.userId;
// ์ธ์
์ ์ธ์
์์ด๋๋ฅผ ๋ฃ์ด์คฌ๋ค๋ฉด ์ผ์นํ๋ ํ์ ์ ๋ณด๋ฅผ body์ ๋ด์ ์๋ตํ๋ค.
res.status(200).json({ data: userInfo, message: 'ok' });
}
}
};
DB ์์ ์ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ session ID ์ ํจ๊ป ์๋ตํด์ค๋ค.
// controller/users/userinfo.js
// DB์์ ๋ถ๋ฌ์จ Users TABLE
const { Users } = require('../models'); // (model/index.js)
module.exports = {
get: async (req, res) => {
// ์์ฒญ์ session_id ๊ฐ์ด ํฌํจ๋์ด ์์ง ์๋ค๋ฉด,
if(!req.session.session_id){
// ๋ฑ๋ก๋ ํ์์ ์ ๋ณด๋ ์์ผ๋ฏ๋ก, ์น์ธ์ ๊ฑฐ๋ถํ๋ค.
res.status(400).send({ data: null, message: 'not authorized' });
}
else {
// session_id ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด,
// session_id ๊ฐ๊ณผ ์ผ์นํ๋ ์ ๋ณด๊ฐ ๋ด๊ธด ํ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์จ๋ค.
// ์๋ฒ ์ธ์
์ ๋ชจ๋ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก, ์๋ฒ์์ ๋น๊ต๊ฐ ์งํ๋๋ค.
const userData = await Users.findOne({
where: { userId : req.session.session_id.userId },
});
// ์ผ์นํ๋ ์ ๋ณด๋ฅผ ๋ด์ ์๋ตํ๋ค.
res.status(200).json({ data: userData.dataValues, message: 'ok' });
}
},
};
๋ก๊ทธ์ธ ํ ( session ID ๋ฅผ ์ทจ๋ํ ํ ) ํ์ ์ ๋ณด๋ฅผ ์ป์ ๋
ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ๋ค์ด์๋ session ID ์ ์๋ฒ์ ์ ์ฅ๋ session ID ๋ฅผ ๋์กฐํ์ฌ ์ผ์นํ๋ ์ ๋ณด๋ฅผ ๋ฐํํ๋ค. !-!
๐ ์ถ๊ฐ ์ง๋ฌธ ์ฌํญ
์ฝ๋๋ฅผ ๋ณด๋ฉด, session ์ session_id ๋ฅผ ์ ์ฅํ๋ ๋ถ๋ถ์ ์์ด๋
ํด๋ผ์ด์ธํธ์๊ฒ ( set-cookie ๋ฅผ ์ด์ฉํ๋ req.cookie( ) ๋ฅผ ์ด์ฉํ๋ ) cookie ๋ก ์ ๋ฌํด์ฃผ๋ ๋ถ๋ถ์ ์๋ค.
๋ฐ๋ก ๊ตฌํํ์ง ์์๋ ๋๋๊ฑด์ง ๋ด๊ฐ ๋นผ๋จน์ ๊ฑด์ง ์์๋ณผ ๊ฒ
-> ์ค์ค๋ก ๋ด๋ฆฐ ๊ฒฐ๋ก
express-session ์ ์ด์ฉํด ์์ฑํ session ๊ฐ์ฒด ์์ cookie ์ ๋ณด๊ฐ ํฌํจ๋์ด์๋๋ฐ,
์ด๋ฅผ session-cookie ๋ก ํตํฉํด์ ๋ด์ผํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์๋ฒ์ชฝ์์ ๋ฐ๋ก ์ฟ ํค๋ฅผ ์ค์ ํ์ง ์์๋ session ์์ ์ํ๋ ํค์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด
์๋์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก๋ ์ฟ ํค๊ฐ ์์ฑ๋๋ ๊ฒ ์๋๊ฐ ...! ์ถ์ธก .
express-session ์๋๊ณผ์ ์ ์ ํํ๋ ๋ชจ๋ฅด๊ฒ ๋ค. ์์ฒญ๊ณผ ์๋ต ์ฌ์ด๋ฅผ ๋ฏ์ด๋ณด๋ ์๋ฐ์.
'Back-end > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Token & Token-based Authentication ์ ๋์ ๊ณผ์ (feat. JWT) (0) | 2021.11.26 |
---|
๋๊ธ