티스토리 뷰

Server

Node Express Session 설정하기

니용 2021. 2. 8. 22:50
반응형

app.js

app.use(session({
  secret: 'secret code',
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: false, // 이 부분이 true이면 세션 설정이 안되요
    maxAge: 1000 * 60 * 60
  }
}));

app.post('/api/login', async (req, res) => {
  req.session['email'] = 'jypark@gmail.com';
  res.send('ok');
});

app.post('/api/logout', async (req, res) => {
  req.session.destory();
  res.send('ok');
});

위의 상황은 각 로그인/로그아웃 시 세션이 적용해주어야 하는 값입니다. 이메일의 값은 스태틱하게 적용되어 있지만 이 부분을 dbPool에서 조회된 값으로 저장하여두 되겠죠.

 

또 이전에 적었던 post 요청에서 수정을 하여야 하는 부분입니다. 세션에 들어있는 이메일의 값을 검증하는 로직이 추가 되었어요.

app.post('/api/:alias', async (req, res) => {
  if(!req.session.email) {
    return res.status(401).send({
      error: '로그인이 되지 않았어요.'
    });
  }

  try {
    res.send(await req.db(req.params.alias));
  } catch(err) {
    res.status(500).send({
      error: err
    });
  }
});

만약 로그인이 필요하지 않는 소스인데도 세션 값을 검증하면 아무래도 문제가 발생할 수도 있습니다. 

이런 경우는 아래와 같이 uri를 변경하여 적용하여도 됩니다.

// 로그인시에만 가능
app.post('/api/auth/:alias', async (req, res) => {
  if(!req.session.email) {
    return res.status(401).send({
      error: '로그인이 되지 않았어요.'
    });
  }

  try {
    res.send(await req.db(req.params.alias));
  } catch(err) {
    res.status(500).send({
      error: err
    });
  }
});

// 비로그인시에도 가능
app.post('/api/v1/:alias', async (req, res) => {
  try {
    res.send(await req.db(req.params.alias));
  } catch(err) {
    res.status(500).send({
      error: err
    });
  }
});
반응형
댓글
공지사항