express session

BenKim·2020년 8월 1일
0

세션의 동작요약

  1. 서버는 웹브라우저에게 세션값(sid)을 준다.
  2. 클라이언트는 서버에 접속할 때 자신이 가지고있는 sid를 서버에 전달한다.
  3. 서버는 클라이언트가 보내준 sid를 확인하고 해당유저를 식별한다.

이 세션을 서버에서 손쉽게 활용할수 있도록 도와주는게 express-session이다.
순서대로 살펴보자

express에 적용

서버 엔트리포인트에 해당내용을 적어둔다.

const session = require('express-session');
/*
 * session(option)
 * secret - session hijacking을 막기위해 hash값에 추가로 들어가는 값 (Salt와 비슷한 개념)
 * resave - session을 언제나 저장할지 정하는 값
 * saveUninitialize: true - 세션이 저장되기 전에 uninitialized 상태로 만들어 저장
 */

app.use(
  session({
    secret: '@codestates',
    resave: false,
    saveUninitialized: true
  })
);

세션 접근하기

app.get('/', function(req, res){
    sess = req.session; // 간단하게 접근가능하다.
});

세션 변수 설정

app.get('/login', function(req, res){
    sess = req.session; 
    sess.username = "benKim" // 아주간단하게 값을 넣어줄 수 있다.
});

세션 제거

req.session.destroy(function(err){
   // cannot access session here
});

활용

  • info

module.exports = {
  get: (req, res) => {
    let sid = req.session.userId;
    if (sid) {
      console.log("hi");
      users
        .findOne({ where: { id: sid } })
        .then((data) => res.status(200).send(data));
    } else {
      res.status(401).send("need user session");
    }
  },
};
  • sign in

module.exports = {
  post: (req, res) => {
    const { email } = req.body;
    sess = req.session;

    users.findOne({ where: { email } }).then((data) => {
      if (data) {
        sess.userId = data.id;
        res.status(200).send({ id: sess.userId });
      } else {
        console.log("testest");
        res.status(404).send("unvalid user");
      }
    });
  },
};
  • sign out

module.exports = {
  post: (req, res) => {
    let sid = req.session;
    console.log(sid);
    if (sid.userId) {
      req.session.destroy(function (err) {
        if (err) {
          console.log(err);
        } else {
          console.log("req.session", req.session);
          res.redirect("/");
        }
      });
    } else {
      res.redirect("/");
    }
  },
};
profile
연습과 자신감

0개의 댓글