Session authentication(세션 인증) JavaScript 코드
안녕하세요. 저번 글에 이어서 실제로 세션을 이용하여 코드를 작성하도록 하겠습니다.
세션에 대한 개념적 설명을 링크를 참고해 주시기 바랍니다.
먼저 npm init을 진행합니다. npm 초기화 방법은 링크를 참고해 주시기 바랍니다.
4개의 npm 모듈을 설치합니다.
express, express-session, cookie-parser, nodemon
이중 nodemon은 해당 링크에서 설치 및 사용법이 나와 있습니다.
설치가 완료가 된 다음 위와 같이 index.js파일을 만들어줍니다.
const express = require("express");
const session = require("express-session");
const cookieParser = require("cookie-parser");
const app = express();
const PORT = 5000;
// 서버 동작을 확인하기 위한 파트
app.get('/', (req, res) => {
res.status(200);
res.send("<h1>Working Well</h1>")
})
app.listen(PORT, () => console.log(`Server at ${PORT}`));
위 코드와 같이 작성하고 테스트를 합니다.
위 2개 사진과 같이 서버도 정상 동작 되고 root url의 get 요청도 정상적으로 되었습니다.
const express = require("express");
const session = require("express-session");
const cookieParser = require("cookie-parser");
const app = express();
const PORT = 5000;
app.use(cookieParser()); // 클라이언트 쪽의 쿠키에 세션을 저장한다.
app.use(session({ // 세션을 셋팅한다.
secret: "test1",
saveUninitialized: true,
resave: true,
cookie: { maxAge: 30000 } // session에 제한시간(ms)
}));
// 유저 데이터
// 실제로는 Data Base(MySQL)에 저장해야 합니다.
const userData = [
{
ID : "alex",
Password : "1234",
Email : "alex@mail.com"
},
{
ID : "jhon",
Password : "1234",
Email : "jhon@mail.com"
},
{
ID : "pull",
Password : "1234",
Email : "pull@mail.com"
},
]
// request body를 json타입으로 읽기위해 필요함
// 서버 동작을 확인하기 위한 파트
app.get('/', (req, res) => {
res.status(200);
res.send("<h1>Working Well</h1>")
})
// 사용자가 로그인에 성공시 사용자 정보를 표시한다.
app.get('/login', (req, res) => {
console.log(req.session);
if(!req.session.user){
res.status(401);
res.send("<h1>Need to Login</h1>")
}
else{
return res.send(req.session.user)
}
});
// 사용자가 로그아웃을 한다.
app.get('/logout', (req, res) => {
console.log(req.session);
req.session.destroy()
return res.send("session has been deleted");
})
// POST
// 사용자가 로그인을 시도한다.
app.post('/login', (req, res) => {
console.log(req.body) // body확인 가능 부분
for(let i = 0; i < userData.length; i++){
console.log("enter For Loop : ", i);
if(userData[i].ID === req.body.ID){ // DB에 user ID가 존재할시
console.log("ID Exist");
if(userData[i].Password === req.body.Password){ // 해당 user ID의 비밀번호가
console.log("password is same");
req.session.user = userData[i];
req.session.save();
console.log(req.session.user);
return res.status(200).send("User logged in!");
}
}
}
res.status(401);
res.send("<h1>Wrong ID or Password</h1>");
})
app.listen(PORT, () => console.log(`Server at ${PORT}`));
위의 코드를 주석을 참고하면서 적어줍니다.
사용자가 로그인을 하면 서버에서는 사용자의 정보를 세션에 저장해서 보내줍니다. 이때 secret은 해당 세션을 암호화 하는 키입니다. 로그인이 인증된 이후 다시 get요청으로 로그인을 하면 해당 쿠키에 있는 세션 값을 분석하여 유저 정보를 보내줍니다. 만약 잘못되거나 만료된 세션이면 "Need to Login"을 응답합니다.
사용자가 로그아웃 하면 해당 세션은 삭제가 됩니다.
해당 코드의 GitHub는 해당 링크를 참고해 주시기 바랍니다.
댓글
댓글 쓰기