1. Secret / Domain
- secret이란, cookie에 sign할 때 사용하는 string
- cookie에 sign하는 이유는 백엔드가 cookie를 줬다는걸 증명하기 위함
- session hijack이라는 해커의 공격 패턴이 존재하기 때문
- secret을 관리하기 위해 굉장히 길고 무작위로 생성되게 관리
- domain은 cookie를 만든 백엔드가 누구인지 알려줌
- 브라우저는 domain에 따라 cookie를 저장하도록 되어 있음
- 그리고 cookie는 domain에 있는 백엔드로만 전송
- 현재 웹사이트는 localhost이므로, 다른 웹사이트의 cookie를 받지 않음
- 일단 secret과 db url을 보호해야 하는데, 환경변수(environment file)을 만들어 관리해야함
// src/.env
COOKIE_SECRET=알아서작성
DB_URL=알아서복붙
// server.js
app.use(
session({
secret: process.env.COOKIE_SECRET,
resave: false,
saveUninitialized: false,
store: MongoStore.create({ mongoUrl: process.env.DB_URL }),
})
);
// db.js
mongoose.connect(process.env.DB_URL, {
useFindAndModify: false,
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
});
- 관습적으로 .env의 내용들은 대문자로 작성
- 하지만 에러가 뜨며 서버가 열리지 않는데 이후 글에서 설명
2. Expiration
- 개발자 도구의 expires에는 session이라고 되어있는데, cookie의 만료 날짜가 명시되지 않았다는 것
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
- 만료날짜를 지정하지 않으면 session cookie로 설정되고, 유저가 브라우저를 닫으면 종료
- max-age는 언제 session이 만료되는지 알려줌
- db에 보면 자동적으로 session에 expires에 날짜가 14일 뒤로 설정되어 있음
'개발 > Node.js' 카테고리의 다른 글
Github Login / Fetch / API (0) | 2024.11.12 |
---|---|
Dotenv / Github Login / UrlSearchParams (0) | 2024.11.12 |
MongoStore resave saveUninitialized (0) | 2024.11.12 |
Cookie Session / Express-Session / Locals (0) | 2024.11.08 |
Login / Bcrypt Compare (0) | 2024.11.08 |