더북(TheBook)

6.2.4 cookie-parser

cookie-parser는 요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만듭니다(4.3절의 parseCookies 함수와 기능이 비슷합니다). cookie-parser 미들웨어는 다음과 같이 사용합니다.

app.js

app.use(cookieParser(비밀 키));

해석된 쿠키들은 req.cookies 객체에 들어갑니다. 예를 들어 name=zerocho 쿠키를 보냈다면 req.cookies는 { name: 'zerocho' }가 됩니다. 유효 기간이 지난 쿠키는 알아서 걸러냅니다.

첫 번째 인수로 비밀 키를 넣어줄 수 있습니다. 서명된 쿠키가 있는 경우, 제공한 비밀 키를 통해 해당 쿠키가 내 서버가 만든 쿠키임을 검증할 수 있습니다. 쿠키는 클라이언트에서 위조하기 쉬우므로 비밀 키를 통해 만들어낸 서명을 쿠키 값 뒤에 붙입니다. 서명이 붙으면 쿠키가 name=zerocho.sign과 같은 모양이 됩니다. 서명된 쿠키는 req.cookies 대신 req.signedCookies 객체에 들어 있습니다.

cookie-parser가 쿠키를 생성할 때 쓰이는 것은 아닙니다. 쿠키를 생성/제거하려면 res.cookie, res.clearCookie 메서드를 사용해야 합니다. res.cookie(키, 값, 옵션) 형식으로 사용합니다. 옵션은 4.3절에서 살펴본 쿠키 옵션과 동일하며 domain, expires, httpOnly, maxAge, path, secure 등이 있습니다.

res.cookie('name', 'zerocho', { 
  expires: new Date(Date.now() + 900000),
  httpOnly: true, 
  secure: true,
});
res.clearCookie('name', 'zerocho', { httpOnly: true, secure: true });

쿠키를 지우려면, 키와 값 외에 옵션도 정확히 일치해야 쿠키가 지워집니다. 단, expiresmaxAge 옵션은 일치할 필요가 없습니다.

옵션 중에는 signed라는 옵션이 있는데, 이를 true로 설정하면 쿠키 뒤에 서명이 붙습니다. 내 서버가 쿠키를 만들었다는 것을 검증할 수 있으므로 대부분의 경우 서명 옵션을 켜두는 것이 좋습니다. 서명을 위한 비밀 키는 cookieParser 미들웨어에 인수로 넣은 process.env.COOKIE_SECRET이 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.