Express-session
Express-session은 Express 프레임워크에서 세션을 관리하기 위해 사용하는 미들웨어다.
Express-session을 통해 로그인과 로그아웃을 구현해 보자.
Express에 적용
var session = require('express-session');
app.use(session({
secret: '@#@$MYSIGN#@$#$',
resave: false,
saveUninitialized: true
}));
secret – 쿠키를 임의로 변조하는것을 방지하기 위한 값. 이 값을 통하여 세션을 암호화 하여 저장한다.
resave – 세션을 언제나 저장할 지 (변경되지 않아도) 정하는 값이다. express-session documentation에서는 이 값을 false 로 하는것을 권장하고 필요에 따라 true로 설정한다..
saveUninitialized – 세션이 저장되기 전에 uninitialized 상태로 미리 만들어서 저장한다.
세션 초기 설정 (initialization)
app.get('/', function(req, res){
sess = req.session;
});
라우터 콜백함수 안에서 req.session으로 세션에 접근 할 수 있다.
세션 변수 설정
app.get('/login', function(req, res){
sess = req.session;
sess.username = "velopert"
});
따로 키를 추가해줄 필요 없이 sess.[키 이름]=값 으로 세션변수 설정이 가능하다.
세션 변수 사용
app.get('/', function(req, res){
sess = req.session;
console.log(sess.username);
});
세션 변수는 위와같이 하면 사용이 가능하다
세션 제거
req.session.destroy(function(err){
// cannot access session here
});
세션을 제거할때는 destroy메소드를 사용한다.
destroy()의 콜백함수에서는 세션에 접근 할 수 없다.
이제 세션을 Rest API에 하나씩 적용해보자.
LOGIN API
app.get('/login/:username/:password', function(req, res){
var sess;
sess = req.session;
fs.readFile(__dirname + "/../data/user.json", "utf8", function(err, data){
var users = JSON.parse(data);
var username = req.params.username;
var password = req.params.password;
var result = {};
if(!users[username]){
// USERNAME NOT FOUND
result["success"] = 0;
result["error"] = "not found";
res.json(result);
return;
}
if(users[username]["password"] == password){
result["success"] = 1;
sess.username = username;
sess.name = users[username]["name"];
res.json(result);
}else{
result["success"] = 0;
result["error"] = "incorrect";
res.json(result);
}
})
})
(router/main.js에 추가)
로그인에 성공했을때 세션에 username과 name을 저장하게 했다.
LOGOUT API
로그아웃을 위해서 router/main.js에 추가하자.
app.get('/logout', function(req, res){
sess = req.session;
if(sess.username){
req.session.destroy(function(err){
if(err){
console.log(err);
}else{
res.redirect('/');
}
})
}else{
res.redirect('/');
}
})
로그아웃하면 메인페이지로 redirect된다
메인페이지 수정
메인페이지에서 세션을 조회 할 수 있게 수정해주자
라우터 상단의 app.get('/'...)부분을 업데이트해주자
app.get('/',function(req,res){
var sess = req.session;
res.render('index', {
title: "MY HOMEPAGE",
length: 5,
name: sess.name,
username: sess.username
})
});
세션 변수가 EJS 템플릿에 전달된다
이제 EJS 파일을 수정해주자
view/body.ejs
<h1>Loop it!</h1>
<ul>
<% for(var i=0; i<length; i++){ %>
<li>
<%= "LOOP" + i %>
</li>
<% } %>
</ul>
<% if(username){ %>
<h2>Welcome! <%= username %> (name: <%= name %>)</h2>
<% }else{ %>
<h2> Please Login. </h2>
<% } %>
로그인 되어있는지 체크하고 로그인중이면 환연메시지를.
그렇지 않다면 로그인 하라는 메시지를 띄운다.
테스트
1. http://localhost:3000/ 접속
2. http://localhost:3000/user/pass 접속 (유저 데이터는 본인 데이터로 입력하면 된다)
3. http://localhost:3000/ 재접속
4. http://localhost:3000/logout 접속
'node JS' 카테고리의 다른 글
10.Node js mongo DB와 Express를 사용해 Restful API만들기-2 (0) | 2020.02.08 |
---|---|
9.Node js mongo DB와 Express를 사용해 Restful API 만들기-1 (0) | 2020.01.31 |
7.Node js Express-3(Restful API) (0) | 2020.01.18 |
6.Node js Express-2(EJS) (0) | 2020.01.11 |
5.Node js Express-1 (0) | 2020.01.04 |
WRITTEN BY