먼저 각각의 JwtStrategy와 adminStrategy 생성해주기
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
export class AdminStrategy extends PassportStrategy(Strategy, 'admin') {
그리고 각각 이름도 설정해주었다!
@Module({
imports: [
PassportModule.register({ defaultStrategy: 'jwt', session: false }),
JwtModule.registerAsync({
useFactory: (config: ConfigService) => ({
secret: config.get<string>('JWT_SECRET_KEY'),
}),
inject: [ConfigService],
}),
UserModule,
],
providers: [JwtStrategy, AdminStrategy],
})
export class AuthModule {}
auth.module에 providers에 추가해 준 후,
@UseGuards(AuthGuard('jwt'))
@Get()
async getEmail(@UserInfo() user: User) {
const point = await this.userService.point(user.id);
return { user, point };
}
AuthGuard뒤에 각각 설정한 이름을 넣어주면 해당하는 Strategy를 호출하여 검증해준다!
처음에는 이름 지정하지 않고 jwt를 사용하여 API를 호출했을 때는 두 가지 다 검증을 해서
각각 필요한 guard를 검증할 수 있도록 엄청 많이 시도했다..
export 해주고 @UseGuards(JwtStrategy) 라고 작성을 했을 때는
아예 JwtStrategy를 호출하지 못하였다..
그래도 이름을 지정해준 후 API를 호출하니 각각 실행이 된다!!!!!!!