• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Auth 모듈에서 JwtAuthGuard 가 아닌, JwtStrategy 를 provider 하는 이유?

23.12.27 09:32 작성 조회수 181

0

import { Module, forwardRef } from '@nestjs/common';
import { AuthService } from './auth.service';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { CatsModule } from 'src/cats/cats.module';
import { JwtStrategy } from './jwt/jwt.strategy';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt', session: false }),
    JwtModule.register({
      secret: 'secret',
      signOptions: { expiresIn: '1y' },
    }),
    forwardRef(() => CatsModule),
  ],
  providers: [AuthService, JwtStrategy],
  exports: [AuthService],
})
export class AuthModule {}

 

auth.module.ts 에서 JwtAuthGuard를 provider 에 추가하지 않고, JwtStrategy를 제공하는 이유가 궁금합니다.

 

실제로 Cat controller 에서는 authService의 JwtAuthGuard를 통해 호출되는거 아닌가요?

 

JwtAuthGuard & JwtStrategy 둘다 provider 에 추가하라고 하면 그것대로 이해가 되는데, JwtStrategy만 추가하는게 이해가 잘 안되어서요ㅠㅠ

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.29

안녕하세요, 인프런 AI 인턴입니다.

NestJS에서 JwtAuthGuardproviders에 직접 추가하지 않고, JwtStrategy를 제공하는 이유는 NestJS의 인증 메커니즘을 이해하면 명확해집니다. JwtAuthGuard는 요청이 인증되어야 하는지를 결정하는데 사용되며, JwtStrategy는 실제 인증 로직을 담당하는 클래스입니다. JwtAuthGuard는 내부적으로 JwtStrategy를 사용하여 토큰의 유효성을 검사하고 해당 사용자를 식별합니다.

AuthGuard는 Passport를 기반으로 하여 특정 Strategy를 실행시키는 역할을 하며, 클래스의 형태를 가진 Guard를 공급하는 대신에 @UseGuards 데코레이터를 사용하여 각각의 컨트롤러나 라우트 핸들러에 직접 적용합니다. 이렇게 함으로써 우리는 커스터마이징된 Guard의 인스턴스를 여러 곳에서 재사용할 수 있게 됩니다.

예를 들어, 특정 라우트에서 인증을 요구할 경우, @UseGuards(JwtAuthGuard) 데코레이터를 해당 라우트에 추가함으로써, 해당 Guard를 사용하겠다는 것을 의미합니다. JwtAuthGuard는 자동으로 JwtStrategy를 사용하여 인증 과정을 처리합니다. 따라서 providersJwtStrategy만 추가되어 있어도 충분한 것입니다.

실제 컨트롤러에서는 JwtAuthGuard를 사용하여 인증을 요구하게 되므로, JwtStrategy가 필요한 인증 로직을 수행하도록 하기 위해 AuthModule에서 JwtStrategyproviders에 추가해야 합니다. JwtAuthGuardJwtStrategy에 의존하기 때문에 Guard를 명시적으로 providers에 추가할 필요가 없는 것입니다.

각각의 인증 방식마다 Strategy를 구현하게 되고, 그 Strategy를 통해 JwtAuthGuard 같은 Guard가 인증 과정에서 필요한 작업을 수행하게 되는 것이죠. 따라서 JwtStrategyproviders에 추가하는 것만으로도 NestJS 애플리케이션에서는 충분한 인증 로직을 가질 수 있습니다.