const cookieParser = require('cookie-parser');
const expressSession = require('express-session');
...
app.use(cookieParser());
app.use(expressSession({
secret: 'my key',
resave: true,
saveUninitialized: true
}));
routes.post('/loginAction', joinController.getLoginAction);
exports.getLoginAction = (req, res, next) => {
let userid = req.body.userid;
let userpassword = req.body.userpassword;
Login.loginAction(userid, userpassword, (member) => {
if (!member) {
console.log("로그인 에러 : " + err);
} else {
console.log("로그인 액션 성공");
req.session.user = member;
res.render("index", {
pageTitle: "Welcome E-Book2",
member: req.session.user,
});
}
});
};
let member = (cb) => {
var user;
if (cb) {
user = { ...cb };
} else {
user = {};
};
return user;
};
module.exports = class Login {
constructor(userid, userpassword) {
this.userid = userid;
this.userpassword = userpassword;
}
static loginAction(id, password, cb) {
if (id && password) {
var loginSql = "SELECT * FROM member WHERE userid = ?";
var param = id;
connection.query(loginSql, param, (err, row, fields) => {
if (err) {
console.log("쿼리 1 에러 : " + err);
} else {
if (password != row[0].userpassword) {
console.log("비밀번호를 정확하게 입력해주세요.");
} else {
console.log("로그인 성공!!");
cb(member({ ...row[0] }));
}
}
});
connection.end();
} else {
console.log("아이디와 비밀번호를 입력해주세요.");
}
}
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title><%= pageTitle %></title>
<!-- Core theme CSS (includes Bootstrap)-->
<link href="/css/styles.css" rel="stylesheet" />
</head>
<body>
<!-- Responsive navbar-->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container px-5">
<a class="navbar-brand" href="/">E-Book</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item"><a class="nav-link active" aria-current="page" href="/">Home</a></li>
<% if(!member) { %>
<li class="nav-item"><a class="nav-link" href="/login">Login</a></li>
<li class="nav-item"><a class="nav-link" href="/join">Join</a></li>
<% } else { %>
<li class="nav-item"><a class="nav-link" href="/mypage"><%= member.username %>님 환영합니다.</a></li>
<li class="nav-item"><a class="nav-link" href="/logout">Logout</a></li>
<% } %>
<li class="nav-item"><a class="nav-link" href="#!">Contact</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Services</a></li>
</ul>
</div>
</div>
</nav>
로그인 전
로그인 후
routes.get('/logout', joinController.logout);
exports.logout = (req, res, next) => {
if(req.session.user){
req.session.destroy((err) => {
if(err){
console.log('로그아웃 에러 : ' + err);
} else {
console.log('로그아웃 성공');
res.redirect('/');
}
});
};
}