이번에는 node.js에서 cookie를 사용하는 방법을 알아보도록 하겠습니다.
cookie를 그냥 사용하면 보안에 취약하므로 암호화된 cookie를 사용하는 방법으로 알아보겠습니다.
Cookie 사용을 위한 설정
Cookie-parser 모듈 설치
Express 프레임워크은 cookie-parser라는 모듈을 통해 cookie를 사용합니다.
npm install cookie-parser --save
web.js 설정
express 프레임워크에서 cookie parser를 사용할 수 있도록 web.js에 설정합니다.
cookieParser(secret, options) 에서 첫번째 인자인 secret은 쿠키 서명에 사용되는 문자열 또는 배열을 의미(선택사항)하고, 두번째 인자 options는 쿠키에서 사용되는 option을 의미하며 선택사항입니다.
var cookieParser = require('cookie-parser');
//암호화된 쿠키를 사용하기 위해 임의의 문자 사용
app.use(cookieParser('fvnslfjslkfjslfjslf'));
//평문 쿠키를 사용하려는 경우
//app.use(cookieParser());
Cookie 사용하기
cookie에 값 세팅
res.cookie(name, value, options) 함수를 통해 응답 헤더에 쿠키를 설정합니다.
router.get('/login', function (req, res) {
...
var expiryDate = new Date( Date.now() + 60 * 60 * 1000 * 24 * 7); // 24 hour 7일
res.cookie('loginObj', loginObj, { expires: expiryDate, httpOnly: true, signed:true });
...
}
자주 사용하는 Options
expires 는 전송된 쿠키의 보증기간을 의미합니다. (임의로 쿠키를 삭제하지 않는 한 브라우저를 종료하더라도 보증기간까지 사라지지 않음)
httpOnly 는 웹서버에서만 쿠키에 접근할 수 있도록 플래그를 지정합니다. (자바스크립트에서 임의로 cookie에 접속하는 것을 막기 위해 true로 설정)
signed : 서명(암호화)된 쿠키를 사용하도록 설정합니다.
cookie 값 사용
암호화된 쿠키의 경우는 'req.signedCookies.변수명'을 이용해서 사용하면 됩니다.
일반 쿠키의 경우는 'req.cookies.변수명'으로 사용합니다.
router.get('/login', function (req, res) {
...
var cookieLoginObj = req.signedCookies.loginObj; //암호화된 쿠키
var cookieLoginObj = req.cookies.testKey; //평문 쿠키
...
});
로그인 처리
이전에 알아본 네이버밴드 로그인 API를 이용해서 정상적으로 로그인한 경우 암호화된 쿠키를 저장해서 로그인 처리 합니다. (반드시 암호화된 쿠키 사용해야하며, 비밀번호 등 민감한 개인정보를 저장하면 안됨)
2019/04/02 - [Node.js] - [Node.js] 외부서비스 API(네이버밴드) 적용하기
router.get('/login', function (req, res) {
...
var expiryDate = new Date( Date.now() + 60 * 60 * 1000 * 24 * 7); // 24 hour 7일
res.cookie('loginObj', loginObj, { expires: expiryDate, httpOnly: true, signed:true });
...
}
그리고 로그인 여부를 아래와 같이 체크합니다.
router.get('/', function(req, res) {
var cookieLoginObj = req.signedCookies.loginObj;
if(cookieLoginObj && cookieLoginObj.mberSn !== ''){
..로그인한 경우 처리..
}else{
..로그인하지 않은 경우 처리..
}
});
로그아웃 처리
res.clearCookie(쿠키명)을 이용합니다.
router.get('/logout', function (req, res) {
res.clearCookie("loginObj");
res.redirect("/");
});
https://github.com/expressjs/cookie-parser
다음강좌 :
2019/04/03 - [Node.js] - [Node.js 11강] 모든(또는 특정)요청에 대한 공통로직을 처리하기 위해express next() 사용하기
'Node.js' 카테고리의 다른 글
[Node.js 11강] 모든(또는 특정)요청에 대한 공통로직을 처리하기 위해express next() 사용하기 (0) | 2019.04.03 |
---|---|
[Node.js 7강] 클라이언트-서버간 데이터(파라미터) 전송 방법과 REST방식 URL 설계 (0) | 2019.04.03 |
[Node.js 9강] 외부서비스 API(네이버밴드) 적용하기 (0) | 2019.04.02 |
[Node.js 8-2강] 다중쿼리 처리 방법, sql에 파라미터 매핑하는 다양한 방법 (0) | 2019.04.02 |
[Node.js 8-1강] mysql DB 연결하고 sql 결과 받아서 활용하는 방법 (0) | 2019.04.02 |