본문 바로가기

백엔드/nodeJS

connect-mongo (cookie, session, env)

session data는 서버에 저장되고 id만 쿠키에 저장이 된다. 서버를 재시작하면 저장된 session 아이디는 초기화된다. 그래서 session store(session id가 저장된 곳)을 mongo와 연결해서 값을 저장해줘야 서버를 재시작해도 유저를 잊어버리지 않는다. session과 mongo를 연결하기 위해 connect-mongo를 사용해야한다.

 

1. npm i connect-mongo 설치
2. server 에 import 
3. MongoStore.create

 

session을 저장을 MongoStore에 저장

seisson은 브라우저가 백엔드에 방문할 때 생성된다. 몽고db에 저장된 seisson 덕분에 브라우저가 우리를 기억할 수 있다. 서버를 재시작해도 동일한 쿠키를 갖고 있다. (로그인 후 서버를 재시작해도 로그인이 유지가 된다!!)

 


* resave : 모든 requese 마다 세션의 변경사항 상관없이 저장할까?

- 대부분의 경우 false 값을 주고 공식문서에서도 false를 권장한다. 단, 세션 만료일자를 업데이트 해주는 기능이 없는 경우 ture로 설정하여 매 request 마다 세션을 업데이트 해줘도 된다.

 

* saveUninitialized : request에서 새로 생성된 세션에 작업이 이뤄지지 않은 상태에도 저장할 것인가?

- 여기서 작업이란 (ex: req.session.loggedin=true 와 같은 작업)

- 익명의 사용자들의 세션까지 저장하게 되면 메모리를 비효율적으로 사용하기 때문에 false 

- 우리는 중간에 작업을 해줬기 때문에 세션 저장이 잘된다.

 


쿠키에는 다양한 프로퍼티가 있다. 가장 중요한 것은 secret 과 DB_URL 이다.

 

cookie property 

* secret :  세션 ID 쿠키에 서명하는 비밀 string (길고 무작위로 생성) 쿠키에 sign하는 이유는 백엔드가 쿠키를 줬다는 것을 증명하기 위해!... 노출되면 다른 사람이 해당 secret 값으로 나인척 할 수 있다.

 

* domain : 쿠키를 생성한 백엔드를 알려준다. 쿠키를 생성한 백엔드는 해당 쿠키만 받는다. youtube가 생성한 쿠키는 youtube만 받는다. 내가 못받음.

 

* expire : 쿠키의 생존 시간. 지정하지 않으면 브라우저가 닫히거나 재부팅시 자동으로 소멸된다.

 

* max-age : 쿠키가 만료될 때 까지의 시간 (밀리세컨드) 설정가능


위에서 말한 secret / DB_URL은 외부로 노출되면 개인정보로 인해 피해가 발생할 수 있다. 그래서 배포하거나 git 등에 업로드할 때 환경변수로 만들어서 해당 값을 파일로만 보관할 수 있게 해야한다.

환경변수 env 만드는 방법

1. 파일 .env 생성 (변수명은 대문자로 작성)
2. .gitigonre 에 .env 파일 추가 (git 업로드시 제외)
3. string 값을 환경 변수로 지정 (process.env.###)

환경변수로 만든 후 모든 파일에서 읽어오기 위해서는 dotenv 라는 패키지가 필요하다.

 

* npm i dotenv 설치

https://www.npmjs.com/package/dotenv

 

dotenv

Loads environment variables from .env file. Latest version: 16.3.1, last published: a month ago. Start using dotenv in your project by running `npm i dotenv`. There are 36012 other projects in the npm registry using dotenv.

www.npmjs.com

서버가 시작할 때 제일먼저 해당 환경변수를 불러와야 모든 곳에서 작동할 때 에러가 없기 때문에 제일 먼저 불러와야 한다!

require("dotenv").config()을 사용하면 되는데 이 경우 환경변수가 작용한 파일 제일 상단에 있어야 한다. 번거로워 import 형식으로 작성 하면 한번만 서버가 시작할 때 한번만 불러오면 된다.

ex ) 작성한 파일의 경우 init.js에서 제일 상단에 위치하면 된다.

 

require('dotenv').config()   ---->  import "dotenv/config"

 

 

반응형

'백엔드 > nodeJS' 카테고리의 다른 글

File Upload - multer middleware  (0) 2023.07.27
Sessions and Cookies  (0) 2023.07.23
브라우저 Status Code  (0) 2023.07.16
express (6) - GET / POST  (0) 2023.06.25
express (5) - absolute / relative URL  (0) 2023.06.25