Express-session : LoggedIn with MongoDB

라이브톡톡·2021년 11월 7일
0

MONGO

목록 보기
10/10

npm i express-session

1-1 server.js import

1-2 sending to browser

app.use(
session({
secret: process.env.COOKIE_SECRET,
resave: false, // (매 request 마다 세션을 계속 다시 저장하는 것)
saveUninitialized: false, // request가 들어오면 해당 request에서 새로 생성된 session에 아무런 작업이 이루어지지 않은 상황을 말합니다.
// cookie: {
// maxAge: 20000, //쿠키저장된 로그인 유지 시간 지정(millisecond)
// },
store: MongoStore.create({ mongoUrl: process.env.DB_URL }), // 이렇게 적용하면 mongoDB에 로그인된 정보가 저장되어 서버를 죽여도 원래 로그인상태가 유지됨 -> mongoDB에 로그인 정보가 저장되어 있기 때문...
})
);

2 controller.js 에서 session에
req.session.loggedIn = true; // 로그인 상태
req.session.user = user; // DB user data 저장

3-1 middleware.js : pug local 전역변수 이므로 pug에서 사용이 가능함

(1) res.locals.loggedIn = Boolean(req.session.loggedIn);
-> session의 변수를 locals에 담는다
(2) res.locals.siteName = 'PlayWeb';
-> session의 변수를 locals에 담는다
(3) res.locals.loggedInUser = req.session.user;
-> session의 변수를 locals에 담는다

3-2 server.js 에 "import {localsMiddleware} from './middleware';"

3-3 middleware 추가 (session 아래 router 위에 ...)
'

npm i connect-mongo
https://www.npmjs.com/package/connect-mongo
4-1 MongoDB에 Store 생성

4-2 db에 session collection이 만들어져서 refresh 하면 session 정보가 저장됨

4-3 로그인하고 DB를 보면 아래 두개가 저장된 것을 볼수 있다
1) LoggedIn : true
2) user data

4-4 로그인 햿을때만 DB에 저장하고 싶을때는.. (DB 저장공간 고려, 필요없는 session 정보 불필요)


1) resave: false, // (매 request 마다 세션을 계속 다시 저장하는 것)
2) saveUninitialized: false, // request가 들어오면 해당 request에서 새로 생성된 session에 아무런 작업이 이루어지지 않은 상황을 말합니다.
(1) saveUninitialized : true < 따로 값을 설정하지 않은 전달 받은 날 것의 세션을 즉시 Store에 저장 후 세션 주인에게 쿠키를 (답장하듯) 넘겨 준다.
(2) saveUninitialized : false < req.session 속 값을 수정하는 그 순간에 세션을 Store에 저장 후 그제야 쿠키를 전달한다.

4-5 session의 만료 날짜 지정 가능 : 지정하지 않으면 default 값으로 저장 (약 2주)

0개의 댓글