如何在Nestjs中使用express的路由特定中间件?

Abh*_*.M. 7 nestjs

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

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

app.get( '/protected', keycloak.protect('adminRole'), handler );
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*OPS 12

你的“处理”是一个方法(饰有两种GET,或POST在装饰带班等)@Controller。导入此控制器的模块应该声明中间件。

例子:

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

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

落实NestModule是关键。然后您必须声明configure并可以使用consumer.

  • 你从哪里获取 keyCloack 实例?难道不能将它集成到 @AuthGuard 中吗?非常感谢示例 keycaloak + naestjs 设置的链接。 (2认同)