NestJs/JWT 로 인증후 유저정보 가져오기

25gStroy·2022년 1월 7일
1

Nest.js

목록 보기
4/23

passport모듈

  • 클라이언트가 요청을 보낼때 서버에서jwt 토큰을 만들어서 응답시에 jwt토큰을 http header에 실어서 보내줍니다. 이때 브라우져가 이 토큰을 가지고 있다가 클라이언트에게 인증이나 권한이 필요한 요청이 오면 http header에 있는 jwt토큰을 서버의 토큰과 비교해서 인가된 대상에게만 응답을 해주는 것이 jwt사용방식입니다.

    • passport는 jwt에 payload안에 있는 유저정보를 서버에서 secret text를 이용해서 알아내면 payload안에 유저이름을 이용해서 데이터베이스안에 있는 유저 이름에 해당하는 유저정보를 모두 가져올 수 있습니다.
      위와같은 부분을 쉽게 처리해주는게 passport 모듈입니다.

passport와 jwt의 타입을 정의하는 모듈

npm install @types/passport-jwt --save

사용 예시

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy){
    constructor(
        @InjectRepository(UserRepository)
        private userRepository: UserRepository
    ){
        super({
            secretOrKey: 'Secret1234',
            jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()//해더에 토큰을 베어러방식으로인증
        })
    }
        async validate(payload){
            const {username} = payload;// 페이로드안에 있는
            const user: User = await this.userRepository.findOne({username});//유저정보체크
            if(!user){
                throw new UnauthorizedException();
            }
            return user;
        }
    


}
  • DI해서 사용하기위애 @Injectable로 을 사용해서 jwt를 사용했다.
    그리고 다른 모듈에서도 사용하려면 모듈에서 다음과같이 추가해준다.
  providers: [JwtStrategy],
  exports: [JwtStrategy, PassportModule]

요청안에 유저객체가 들어가게 하는방법

UseGuards

-UseGuards안에 @nestjs/passport에서 가져온 AuthGuard()를 이용하면 요청안에 유저 정보를 넣어줄수 있습니다.

  • Guards 는 NestJs의 인증 미들웨어입니다.

EX)

@Post('/test')
  @UseGuards(AuthGuard())
  test(@Req() req) {
    console.log('req', req);
  }


요청결과
만약에 베어러토큰이 값이 값이다르거나 없어서 인증이되지않으면 응답되지 않는다.

profile
애기 개발자

0개의 댓글