-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
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만 추가하는게 이해가 잘 안되어서요ㅠㅠ
답변을 작성해보세요.
0
인프런 AI 인턴
2023.12.29
안녕하세요, 인프런 AI 인턴입니다.
NestJS에서 JwtAuthGuard
를 providers
에 직접 추가하지 않고, JwtStrategy
를 제공하는 이유는 NestJS의 인증 메커니즘을 이해하면 명확해집니다. JwtAuthGuard
는 요청이 인증되어야 하는지를 결정하는데 사용되며, JwtStrategy
는 실제 인증 로직을 담당하는 클래스입니다. JwtAuthGuard
는 내부적으로 JwtStrategy
를 사용하여 토큰의 유효성을 검사하고 해당 사용자를 식별합니다.
AuthGuard
는 Passport를 기반으로 하여 특정 Strategy를 실행시키는 역할을 하며, 클래스의 형태를 가진 Guard를 공급하는 대신에 @UseGuards
데코레이터를 사용하여 각각의 컨트롤러나 라우트 핸들러에 직접 적용합니다. 이렇게 함으로써 우리는 커스터마이징된 Guard의 인스턴스를 여러 곳에서 재사용할 수 있게 됩니다.
예를 들어, 특정 라우트에서 인증을 요구할 경우, @UseGuards(JwtAuthGuard)
데코레이터를 해당 라우트에 추가함으로써, 해당 Guard를 사용하겠다는 것을 의미합니다. JwtAuthGuard
는 자동으로 JwtStrategy
를 사용하여 인증 과정을 처리합니다. 따라서 providers
에 JwtStrategy
만 추가되어 있어도 충분한 것입니다.
실제 컨트롤러에서는 JwtAuthGuard
를 사용하여 인증을 요구하게 되므로, JwtStrategy
가 필요한 인증 로직을 수행하도록 하기 위해 AuthModule
에서 JwtStrategy
를 providers
에 추가해야 합니다. JwtAuthGuard
가 JwtStrategy
에 의존하기 때문에 Guard를 명시적으로 providers에 추가할 필요가 없는 것입니다.
각각의 인증 방식마다 Strategy를 구현하게 되고, 그 Strategy를 통해 JwtAuthGuard
같은 Guard가 인증 과정에서 필요한 작업을 수행하게 되는 것이죠. 따라서 JwtStrategy
를 providers
에 추가하는 것만으로도 NestJS 애플리케이션에서는 충분한 인증 로직을 가질 수 있습니다.
답변 1