我正在尝试使用此库(keycloak-connect)进行身份验证和授权。它有一个全局中间件,可以由app.use()
方法直接使用,也可以在它周围包装一个nestjs中间件类。但是如何使用用于保护个别路由的路由特定的中间件?。
普通快递应用中的示例用法
app.get( '/protected', keycloak.protect('adminRole'), handler );
protect方法返回带有签名function(req, res, next)
答案 0 :(得分:2)
您的“处理程序”是一个用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
。
答案 1 :(得分:0)
如果仅希望将中间件应用于控制器中的路由,则可以-
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes(CatsController);
}
}