본문 바로가기

Nest js/SESSION

NestJS 로그인 SESSION 기능 예시

728x90

세션은 유저에 관한 정보를 저장한다. 그런데! 어디에 ? 서버에 저장을 한다. 따라서 보안은 좋으나 부하가 있을 수 있다!

NestJS 프레임워크의 SESSION은 express에 기반한다. NestJS 공식 문서를 확인해보자

 

1. 패키지 다운로드

NestJS 공홈 Session 패키지 다운

2. 설정 : 주의 할 점은 listen 보다 위에 설정을 해야 서버에 정상적으로 설정된다. 

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as session from 'express-session'; //세션

async function bootstrap() {
  const app = await NestFactory.create(AppModule); //반환: NestApplication instance
  app.use(
    session({
      secret: 'SESSION_ID_xx', //세션아이디
      resave: false, //request 중에 세션이 수정되지 않아도 세션을 세션 저장소에 다시 저장하도록 강제
      saveUninitialized: false, 
    }),
  ); 
  await app.listen(3000, 'localhost', () => {
    console.log('app listening on port 3000');
  });
}
bootstrap();

 

2. 코드 작성

logIn(@Body() loginInfo, @Req() req: Request, @Res() res: Response) {
    //console.log(loginInfo);
    try {
      //세션 설정
      const session: any = req.session;

      session.user = loginInfo.userId; //사용자가 정의한 임의의 지정 값
      session.cookie.maxAge = 1000 * 10; //만료 시간 : 10초
      res.status(HttpStatus.OK).send({ session: session });
      //console.log(session); undefined
      this.memberService.login(loginInfo);
      console.log(`${session.user} 회원님이 로그인이 하였습니다.`);
    } catch (e) {
      console.log(e);
    }

 

3. 결과 

Insomnia

만료시간을 10초로 주었기 때문에 10초가 유지가 되고 사용자가 정의한 user의 정보 값이 나온다. 

 

728x90