8

我正在尝试使用这个库(keycloak-connect)进行身份验证和授权。它有一个全局中间件,可以通过app.use()方法直接使用,也可以通过在它周围包装一个 nestjs 中间件类来使用。但是如何使用用于保护单个路由的路由特定快速中间件?

普通快递应用中的示例用法

app.get( '/protected', keycloak.protect('adminRole'), handler );

保护方法返回一个带有签名的普通快递中间件function(req, res, next)

4

2 回答 2

14

您的“处理程序”是GET一个POST@Controller. 导入此控制器的模块应该声明中间件。

例子:

@Module({
  controllers: [YourController],
})
export class YourModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(keyCloack.protect('adminRole'))
      .forRoutes('/protected');
  }
}

其中YourController包含路由“/protected”的处理程序。

落实NestModule是关键。然后你有义务声明configure并且可以使用consumer.

于 2018-06-02T09:18:38.000 回答
0

如果您只想将中间件应用于控制器中的路由,您可以 -

export class AppModule implements NestModule {
 configure(consumer: MiddlewareConsumer) {
 consumer
  .apply(LoggerMiddleware)
  .forRoutes(CatsController);
 }
}
于 2020-10-14T05:38:48.240 回答