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

时间:2018-05-30 02:42:13

标签: 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 应用于多条路线,¿什么是最佳做法?谢谢...

Currenly我在控制器功能中使用逐个装饰器,如下所示,

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

但我正在寻找一个实用的实现

1 个答案:

答案 0 :(得分:2)

你有三种可能的解决方案来保护:

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

申请控制器:

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

全球申请警卫:

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

来自警卫文档的所有示例 - https://docs.nestjs.com/guards