-
[m1 맥북] - nest.js 공부하기 32. Passport, Jwt 이용해서 토큰 인증 후 유저 정보 가져오기Nest.js 2022. 6. 4. 18:59728x90
npm install @types/passport-jwt --save //passport-jwt 모듈을 위한 타입 정의 모듈
모듈 설치하기.
1.jwt.strategy.ts 파일 생성
jwt.strategy.ts
1. @Injectable() : Injectable 데코레이터 사용 이유는 JwtStrategy를 다른곳에서도 주입을 해서 사용을 할 수 있게 하기 위해서
2. export class JwtStrategy extends PassportStrategy(Strategy) :
JwtStrategy 클래스에서 PassportStrategy클래스를 상속 받아야 한다 기능을 사용하기 위해 여기서 인자값 Strategy는
passport-jwt에 있는 Strategy이다.
3. constructor에서 UserRepository 주입시켜준 이유는 Payload에 있는 유저 정보를 이용해서 데이터베이스에서 해당 유저의 정보를 가져오기 위해.
4. super({ secretOrkey, jwtFromRequest }) : super 키워드는 부모 객체의 함수를 호출하는데 사용될 수 있습니다.
PassportStrategy 클래스에서 constructor 함수를 호출 함.
- secretOrkey : 토큰이 유효한지 체크 할때 이용, 생성 했을때랑 똑같은 시크릿 키를 넣어줘야함.
- jwtFromRequest : 클라이언트가 토큰을 보낼때 헤더에서 보내는데 fromAuthHeaderAsBearerToken메소드로 토큰을 받아옴.
5. validate : 위에서 토큰이 유효한지 체크가 되면 validate 메소드에서 payload에 있는 유저이름이 데이터베이스에서
있는 유저인지 확인 후 있다면 유저 객체를 return값으로 던져줍니다.
return 값은 @UseGuards (AuthGuard())를 이용한 모든 요청의 Request Object에 들어갑니다.auth.module.ts
중요, 이전에 만든 PassportModule과 JwtStrategy 클래스 등록 방법 ( 지역내에서만 쓸지 전역으로 쓸지 )
오타주의 jwtFormRequest -> jwtFromRequest
auth.controller.ts
요청 값 req에 user 객체가 없다.
UseGuards란 Middleware종류로 가드는 인증 미들웨어입니다. 지정된 경로로 통과 할 수 있는 사람과 허용되지 않는 사람을 서버에 알려줍니다.
useguards라는걸로 인증 미들웨어를 처리 해주는건데 authguard를 넣어주는건데 @nestjs/passport에서 가져온 미들웨어다
authguard를 넣어주면 req안에 JwtStrategy클래스에서 validate메소드에서 리턴값 user의 객체가 req에 들어가게 해줍니다.
auth.controller.ts
req에 user객체가 담겨 있는걸 console.log로 알 수 있다
잘못된 토큰일때
728x90'Nest.js' 카테고리의 다른 글
[m1 맥북] - nest.js 공부하기 34. 인증된 유저만 게시물 보고 쓸 수 있게 해주기 (0) 2022.06.12 [m1 맥북] - nest.js 공부하기 33. 커스텀 데코레이터 생성하기 (0) 2022.06.09 [m1 맥북] - nest.js 공부하기 31. JWT를 이용해서 토큰 생성하기 (0) 2022.06.04 [m1 맥북] - nest.js 공부하기 30. 로그인 기능 구현하기 (0) 2022.06.04 [m1 맥북] - nest.js 공부하기 29. 비밀번호 암호화 하기 (0) 2022.06.04