cookie-parser, express-session 미들웨어
import cookieParser from "cookie-parser";
app.use(cookieParser(process.env.SECRET_KEY))
cookie-parser는 request에 첨부된 쿠키를 해석하여 req.cookies 객체로 만든다.
제공한 비밀 키를 통해 해당 쿠키가 내 서버가 만든 쿠키임을 검증할 수 있다.
쿠키는 클라이언트의 위조를 막기 위해 비밀키를 통해 만들어낸 sign을 쿠키 값 뒤에 붙인다.
서명된 쿠키는 req.cookies 대신 req.signedCookies 객체에 들어있다.
// cookie(key, value, option)
res.cookie('name', 'joos', {
expires: ##;
httpOnly: true,
secure: true,
signed: true,
})
signed 옵션에 true로 설정하면 쿠키 뒤에 서명이 붙는다.
내 서버의 쿠키임을 검증할 수 있으므로 보통 true로 설정하는 것이 좋다.
express-session
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.SECRET_KEY,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
resave : 요청이 올 때, 세션에 수정 사항이 생기지 않더라도 세션을 다시 저장하는지
saveUninitialized : 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지
secret : express-session은 클라이언트에 세션쿠키를 보낸다. 안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 하고, 서명하는데 secret key가 필요하다.
name : 세션 쿠키의 이름이다. 디폴트 값은 connect.sid이다.
cookie: 세션 쿠키에 대한 설정이다. maxAge, path, domain, expires, httpOnly...등등 일반적인 쿠키 옵션이 모두 제공된다.
httpOnly가 true이면 클라이언트에서 쿠키를 확인하지 못하고, secure가 false이면 https가 아닌 http에서도 사용할 수 있게 한다.
store 옵션:
메모리에 세션을 저장하도록 되어있는데, 이렇게 하면 서버를 재시작하면 메모리가 초기화되어 세션이 모두 사라진다.
따라서 배포할 때는 store에 db를 연결하여 세션을 유지하는 것이 좋다. 보통 redis가 쓰인다.