본문 바로가기

Node.js공부/예제를 통한 Node.js 공부

Node.js 공부 8 - express-session

반응형

express-session 은 Express 프레임워크에서 세션을 관리하기 위해 필요한 미들웨어 입니다.

이번 강좌에서는 express-session을 통해 로그인 및 로그아웃을 구현해보도록 하겠습니다.


1. 사용예제

Express에 적용


var session = require('express-session');


app.use(session({

secret: '@#@$MYSIGN#@$#$',

resave: false,

saveUninitialized:true

}));


- secret: 쿠키를 임의로 변조하는 것을 방지하기 위한 값. 이 값을 통하여 세션을 암호화하여 저장합니다.

- resave: 세션을 언제나 저장할지(변경되지 않아도) 정하는 값입니다. 이 값을 false로 설정하는 것을 권장하고 필요에 따라 true 로 설정합니다.

- saveUninitialized: 세션이 저장되기 전에 uninitialized 상태로 미리 만들어서 저장합니다.


세션 초기 설정(initialization)


app.get('/', function(req, res){

session = 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

}


2. 적용


다음은 로그인과 로그아웃 API를 main.js에 추가한 모습입니다.


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"]="user 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);
}
})
});

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('/');
}
})



메인페이지 수정

app.get('/', function(req, res){
var sess = req.session;


res.render('index',{
title: "MY HOMEPAGE",
length: 5,
name: sess.name,
username:sess.username
})
});


메인페이지에서 세션을 조회할 수 있도록 수정해줍니다. 우선 라우터 상단의 app.get('/'...)부분을 위와 같이 업데이트 하세요.

세션 변수를 EJS템플릿 엔진에 전달하게 했습니다.


views/index.ejs

<html>
<head>
<% include ./header.ejs %>
</head>
<body>
<% include ./body.ejs %>
</body>
</html>


views/header.ejs

<title>
<%= title %>
</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script>
console.log("HelloWorld");
</script>


views/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>
<% } %>






반응형

'Node.js공부 > 예제를 통한 Node.js 공부' 카테고리의 다른 글

Node.js 공부 7 - RESTful API  (0) 2019.02.05
Node.js 공부 6 - EJS  (0) 2019.02.05
Node.js 공부 5 - express  (0) 2019.01.31
node.js 공부 4- Callback function  (0) 2019.01.31
Node.js 공부 3 - npm  (0) 2019.01.31