흰 스타렉스에서 내가 내리지

cookie-parser, express-session 미들웨어 본문

Node.js

cookie-parser, express-session 미들웨어

주씨. 2022. 5. 19. 14:47
728x90
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가 쓰인다.