최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

 

정상적인 프로세스는 /logout 처리를 통해서 기존의 session cookie를 삭제해야 하는데

 

새로운 계정의 request가 들어와서 cookie를 만들었다면 res.clearCookie가 안먹히는(...) 현상이있었다

router.get('/logout', (req,res,next)=> {
	res.clearCookie("access_token");
	res.redirect("/");
});

 

아래와 같이 setCookie에서 overwrite: true ( default false ) 로 해결

 

이전에 설정한 동일한 이름(여기서는 acces_token)을 덮어쓸지 여부이다.

// 쿠키를 [ 키 : 값 ] 으로 파싱
const parseCookie = req => {
  if (!req.headers.cookie) return {}

  // reduce => reducer : 누적값 + 현재값
  return req.headers.cookie.split(';').reduce((obj, pair) => {
    pair = pair.trim()
    const k = pair.split('=')[0].trim();
    const v = pair.split('=')[1].trim();
    obj[k] = v;
    return obj;
  }, {})
}

const cookies = {};

// 세션 쿠키 가져오기
cookies.getCookie = (req) => {
  const {access_token} = parseCookie(req); // 쿠키파서

  if( access_token ) return access_token; // access_token 존재하면 리턴
  else return false;
}

// 세션 쿠키 생성하기
cookies.setCookie = (res, token) => {
  return res.cookie("access_token", token, {
    sameSite:'none',
    secure: true, // https, ssl 모드에서만
    // 1d => 1000*60*60*24*1
    maxAge: 1000*60*60*24*7, // 7d, new Date() 밀리초
    httpOnly: true, // javascript 로 cookie에 접근하지 못하게 한다.
    overwrite: true // 이전에 설정한 동일한 이름의 쿠키를 덮어 쓸지 여부. 기본값은 false
  });
}

module.exports = cookies;
댓글