node.js

cookie/session과 로그인 흐름

Heoky 2022. 1. 17. 17:23

로그인 전략을 세웠으면 이제 app.js에서 미들웨어를 추가해준다. 먼저 express-session과 cookie-parsser를 npm install 해준다.

$npm install express-session
$npm install cookie-parser
const express = require('express');
const server = express();

const session = require('express-session');
const passport = require('passport');

const passportConfig = require('./passport');

passportConfig();

server.use(cookieparser());
server.use(session({ secret: 'e도서관-secret', resave: false, saveUninitialized: false })); // 세션 활성화
server.use(passport.initialize()); // passport 구동
server.use(passport.session()); // 세션 연결

서로 다른 도메인에서 같은 정보를 가지기 위해 passport로그인을 위해 app.js에서 미들웨어 4개를 장착해준다.
user의 정보를 브라우저에 그대로 보낸다면 보안에 취약하다.
때문에 서버에서 user의 정보를 session에 담고 있는데 cookie를 통해 랜덤한 문자열 정보(이게 session)를 브라우저에 보낸다.
브라우저에서는 받아온 cookie를 server에 보내면 server는 이 cookie를 가지고 session을 찾고 인지한다.

* session의 secret은 정보를 복구할 수 있는 key이기 때문에 해킹 위험이 있어서 추후 잘 숨겨야한다. (.env를 통해 작업하면 된다)

 

const passport = require('passport');
const local = require('./local');
const { User } = require('../models');

//
module.exports = () => {
  passport.serializeUser((user, done) => {
    done(null, user.id);
  }); // Strategy 성공 시 호출됨

  passport.deserializeUser(async (id, done) => {
    try {
      const user = await User.findOne({ where: { id } });
      done(null, user); // req.user
    } catch (err) {
      console.error(err);
      done(err);
    }
  });

  local();
};

때문에 passport 설정할 때 cookie와 묶어줄 user.id를 가지고 session정보(user의 정보) 정보를 복구하는 것이다.

 

'node.js' 카테고리의 다른 글

middleware로 router 검사하기  (0) 2022.01.18
[node.js] 로그아웃 하기  (0) 2022.01.17
[node.js] passport로 로그인  (0) 2022.01.17
[node.js/CORS] CORS 문제 해결하기  (0) 2022.01.16
[node.js - express]회원가입 구현하기  (0) 2022.01.16