카테고리 없음

TypeScript, Express-session 을 이용한 로그인 처리 (3)

icecokel 2021. 9. 18. 20:00

안녕하세요. 오늘은 저번 포스팅에 이어서 TypeScript 환경에서의 Express-session의 cookie를 이용하여, 자동 로그인을 진행하는 파트를 포스팅 해보겠습니다.


  1. 작업환경
  2. 로그인 기억하기

1. 작업환경

운영체제 Windows 10 Pro
사용 툴 VSCode 1.59
node v14.17.3
npm 6.14.13

2. 로그인 기억하기

 작업 전 cookie의 Expires / Max-Age 먼저 알아 보고 가겠습니다. 각각 만료 / 최대 연령(수명주기) 라고 직역이 가능 할 듯 합니다. cookie가 사라지는 시점이죠. express-session에서는 cookie의 MaxAge를 따로 설정해주지 않으면 seesion 상태가 됩니다.

 

 세션이 사라지면 쿠키도 같이 사라지죠. 로그인 기억하기 기능을 만들 것이기 때문에 저희는 cookie에게 MaxAge 값을 주어서 세션이 사라져도 cookie는 남을 수 있도록 작업을 할 겁니다. 

controller.post("/test", (req, res) => {
  console.log("TEST CONSOLE");
  const session = req.session;

  // request body 안에 내용이 있을 때
  if (req.body) {
    // 이미 로그인 중이 아니라면,
    if (!req.session.isLogined) {
      // session에 필요한 정보를 저장
      session.email = req.body.email;
      session.nickName = req.body.nickName;
      session.isLogined = true;
      if (req.body.isRemember) {
      
        console.log(req.body);

        // 기억하길 원할 때 14일 간 cookie를 살려둠
        const NANO_SEC_IN_A_DAY = 86400000;
        session.cookie.maxAge = 14 * NANO_SEC_IN_A_DAY;
        
      }
      session.save(() => {
        // session에 저장하고, 진행할 내용
        res.send({ result: true });
      });
    } else {
      res.send({ error: "Aleady Logined" });
    }
  }
});

 기존 소스와 같이 약간만 수정했습니다. 클라이언트 단에서 isRemember 값을 true로 보내 줬을 때, cookie의 MaxAge를 14일로 줍니다. 

cookie.maxAge 에 들어가는 숫자의 값은 최소 단위가 나노초 이기 때문에 하루를 먼저 나노초로 환산 한 후에 14를 곱해준 값을 추가로 넣어 줬습니다.

 

 해당 부분은 현재 진행중인 토이 프로젝트의 로그인 일부분입니다. 로그인 상태 유지 체크 박스를 클릭시

{ email: 'ice@coke.com', nickName: 'blog', isRemember: true }

isRemember에 true를 담아서 보냅니다.

 

작업을 9월 16일에 진행했으니, 9월 30일까지로 연장되 cookie의 Max-Age를 볼 수 있습니다. 이제 브라우저를 껐다가 켜도, 로그인 상태가 풀리지 않겠네요! ( 서버 재기동이 없다는 가정 )


 본 포스팅을 보고 어려움이 있으신 분들은 기존 포스팅부터 참고하시면서 따라오시길 바랍니다.

https://icecokel.tistory.com/16

 

 

반응형