2023. 5. 16. 21:21

NestJS 에서 인증할 때 가드라는 미들웨어 사용

 

가드는 @Injectable() 데코레이터가 붙어 있고 

 

CanActivate 인터페이스를 구현한 클래스

 

쿠키 파서 - 쿠키를 Request 객체에서 읽어오는 미들웨어

 

authService의 validateUser 를 사용해 가드를 만들어보자

 

카드를 사용할 때는 UseGuards 데코레이터를 사용

 

괄호 안에 만들어둔 LoginGuard 를 넣어주면 됨

 

LoginGaurd 에서 인증에 성공하면 req.user에 user 할당

 

로그인에 사용할 가드가 필요

 

인증 로직 구현 부분은 패스포트라는 인증 로직을

쉽게 분리해서 개발하는 라이브러리 사용

 

패스포트 사용시 인증 로직은 스트래티지 파일을 생성해서 사용

 

스트래티지는 패스포트에서 인증 로직 수행을 담당하는 클래스

 

전략 패키지를 같이 설치해 인증을 쉽게 구현

 

기존처럼 가드 안에 인증 로직을 두는 것이 아니라 

 

인증 로직을 처리하는 별도의 스트래티지 파일 필요

 

예를 들면 아이디, 비밀번호를 주었을 때

올바른 정보인지 판단하는 로직

 

쿠키에서 값을 읽어서 인증을 위한 올바른 데이터가

들어있는지 등을 검증하는 로직

 

세션 사용시 세션에서 데이터 읽어오는 세션 시리얼라이저 필요

 

사용자 신원을 확인하고 인증 정보를 저장하고 읽어와서

다시 인증하는 작업

 

복잡하지만 이해하고 나면 각 역할 분담이 잘 되어 있어

 

유지보수에 유리

 

 

1. 가드를 통과한 요청은 스트래티지에 전달

 

사용자 신원을 검증함

 

2. 스트래지는 세션 정보를 읽기 위해

세션 시리얼라이저 세션에 있는 인증 정보 요청

 

3. 세션 시리얼라이저는 세션에 있는

인증 정보를 스트래티지에 돌려줌

 

4. 스트래티지는 세션에 있는 인증 정보를 확인해

사용자 유무를 가드에 결과값으로 반환

 

 

 

개발 구현 과정

 

1. 라이브러리 설치 및 설정

 

2. 로그인과 인증에 사용할 가드 구현하기

 

3. 세션 시리얼라이저 구현하기

 

4. 로컬 스트래티지 파일 만들기

 

5. auth.module.ts 설정하기

 

6. 로그인, 사용자 인증 테스트