일단 세션을 구현하기전에 세션과 쿠키에대해서 알아보자
즉 서버를 대신해서 웹 브라우저에 저장을하고 요청할때 서버로 보내 사용자를 구분할수있게해주는것
서버가 사용자의 웹브라우저(Local)에 저장시키며 브라우저마다 저장되는 쿠키가 다르다
쿠키는 웹브라우저에 노출이 되기때문에 보안문제가있다, 그런 보안 문제를 해결하기 위해 인증정보에 해당하는것을 세션에 저장시킨다
예시용 /public/login.html
로그인이 완료되면
/public/example.html로 들어가진다.
메인 index.js (express 서버)
import express from "express";
import http from "http";
import serveStatic from "serve-static";
import path from "path";
const __dirname = path.resolve();
import cookieParser from "cookie-parser";
import expressSession from "express-session";
import bodyParser from "body-parser";
const app = express(); // express Server
app.set("port", 3000);
// 미들웨어를 등록한다
app.use(serveStatic(path.join(__dirname, "public")));
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: false,
})
);
// cookie and session assign middleWare
app.use(cookieParser());
// 세션세팅
app.use(
expressSession({
secret: "my key",
resave: true,
saveUninitialized: true,
})
);
app.get("/process/example", (req, res) => {
if (req.session.user) {
// 세션에 유저가 존재한다면
res.redirect("/example.html"); // 예시로
} else {
res.redirect("/login.html"); // fhrmdlsdmfh
}
});
app.post("/process/login", (req, res) => {
console.log("로그인 함수가 실행됩니다.");
console.log(req.body.data);
console.log(req.password);
const paramID = req.body.id || req.query.id;
const pw = req.body.password || req.query.password;
if (req.session.user) {
// 세션에 유저가 존재한다면
console.log("이미 로그인 돼있습니다~");
res.writeHead(200, { "Content-Type": "text/html; charset=utf8" });
res.write("<h1> already Login</h1>");
res.write(`[ID] : ${paramID} [PW] : ${pw}`);
res.write('<a href="/process/example">예시로</a>');
res.end();
} else {
req.session.user = {
id: paramID,
pw: pw,
name: "UsersNames!!!!!",
authorized: true,
};
res.writeHead(200, { "Content-Type": "text/html; charset=utf8" });
res.write("<h1>Login Success</h1>");
res.write(`[ID] : ${paramID} [PW] : ${pw}`);
res.write('<a href="/process/example">Move</a>');
res.end();
}
});
app.get("/process/logout", (req, res) => {
console.log("로그아웃");
if (req.session.user) {
console.log("로그아웃중입니다!");
req.session.destroy((err) => {
if (err) {
console.log("세션 삭제시에 에러가 발생했습니다.");
return;
}
console.log("세션이 삭제됐습니다.");
res.redirect("/login.html");
});
} else {
console.log("로그인이 안돼있으시네요?");
res.redirect("/login.html");
}
});
const appServer = http.createServer(app);
appServer.listen(app.get("port"), () => {
console.log(`${app.get("port")}에서 서버실행중.`);
});
로그인 성공시 example.html로 이동할수있다
(만약 로그인이 안된상태로 example.html로 이동하면 login.html로 연결된다)
그후 로그아웃하면 login.html로 이동된다
참고한곳
nodejs_express