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 });
쿠키를 지우려면, 키와 값 외에 옵션도 정확히 일치해야 쿠키가 지워집니다. 단, expires나 maxAge 옵션은 일치할 필요가 없습니다.
옵션 중에는 signed라는 옵션이 있는데, 이를 true로 설정하면 쿠키 뒤에 서명이 붙습니다. 내 서버가 쿠키를 만들었다는 것을 검증할 수 있으므로 대부분의 경우 서명 옵션을 켜두는 것이 좋습니다. 서명을 위한 비밀 키는 cookieParser 미들웨어에 인수로 넣은 process.env.COOKIE_SECRET이 됩니다.