将一个 Guard 应用于 Nestjs 中的多个路由

Apply one Guard to multiple routes in Nestjs

例如:将一个中间件应用于多个路由我们可以使用:

export class UserModule {
    public configure(consumer: MiddlewaresConsumer) {
        consumer.apply(AuthMiddleware).forRoutes(
            { path: '/users', method: RequestMethod.GET },
            { path: '/users/:id', method: RequestMethod.GET },
            { path: '/users/:id', method: RequestMethod.PUT },
            { path: '/users/:id', method: RequestMethod.DELETE },
        );
    }
}

我想将 AuthGuard 应用到多个路由,¿ 最佳做法是什么?谢谢...

目前我像这样在控制器函数中使用一个一个的装饰器,

@Get()
@UseGuards(AuthGuard('jwt'))
async findAll(@Request() request): Promise<User[]> {
      return await this.usersService.findAll();
}

但我正在寻找大规模实施

你有三种可能的设置守卫方案:

  • 应用于方法(您的示例)
  • 申请控制器
  • 全球适用

应用于控制器:

@Controller('cats')
@UseGuards(RolesGuard)
export class CatsController {}

全局应用防护:

const app = await NestFactory.create(ApplicationModule);
app.useGlobalGuards(new RolesGuard());

守卫文档中的所有示例 - https://docs.nestjs.com/guards