728x90

사용자가 로그인 한 동안에는 사용자가 API 요청 할 때마다 사용자의 정보를 가져와서 처리해야 할 것이다.

 

보통 이런 경우에는 2가지 방법 중 하나를 사용하는데, 세션혹은 쿠키를 사용한다.

 

우선 세션을 먼저 알아보고, 해당 강의가 끝나면 JWT를 통한 쿠키 인증 방법을 알아보자.

 

우선 cookie-session을 사용할 것인데, 이 라이브러리는 기존의 세션과는 다르게 세션데이터를 클라이언트의 쿠키에 저장한다고 한다.

어쩌면 쿠키라고 말하는 것이 맞을 거 같기도 하다.

이런식으로 세션을 유지한다고 한다.

 

우선 cookie-session 라이브러리부터 가져오자.

 npm install cookie-session

 npm install @types/cookie-session

 

그 다음에 main.ts에 cookie-session을 설정해준다.

const cookieSession = require('cookie-session');

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(
      new ValidationPipe({
        whitelist: true,
      })
  );
  app.use(cookieSession({
    keys:['seungkyu']
  }))
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

cookie-session은 ts가 되지 않아, 저렇게 require를 사용해야 한다고 한다.

 

app.use로 cookieSession을 설정해주고, key를 넣어야 한다.

이 key는 cookie에 평문 그대로 넘겨주지 않으니 약간의 암호화를 하는데, 그 때 사용하는 키다.

지금은 연습단계니 간단하게 이름으로 추가했다.

 

이제 간단하게 userController에 /test 핸들러를 추가해서 세션을 조작해보자.

 

    @Get("/test/:name")
    testWriteSession(@Param('name') name:string, @Session() session: any){
        session.name = name;
    }

    @Get("/test")
    testReadSession(@Session() session: any){
        return session.name;
    }

이렇게 데코레이터로 Session을 가져온다.

우선 간단하게 쓰고, 읽도록 만들어보았다.

 

이제 다음과 같은 http call을 날려보자.

 

그 다음 위의 http call을 날려보면

이렇게 Set-Cookie가 온 것을 볼 수 있다.

쿠키의 위조를 막기 위해 하나는 실제 쿠키, 하나는 서명값이 온다고 하고

seungkyu가 온 것이 아니라 암호화가 되어 온 것을 볼 수 있다.

 

그 다음 밑의 http call은

이렇게 정상적으로 다시 해독해서 온 것을 볼 수 있다.

 

그리고 위의 http call을 다시 날려보면

Set-Cookie가 없는 것을 볼 수 있는데, 쿠키가 같으면 굳이 nest에서 새롭게 쿠키를 굳이 업데이트 하지 않기 때문이다.

 

일단 간단하게 nest에서 session을 사용하는 방식을 알아보았다.

이제 이 session을 사용해 사용자의 로그인을 유지해보자.

+ Recent posts