如何全局应用Swagger UI的@ApiBearerAuth()而不是为每个控制器应用

Nig*_*NKY 9 node.js express swagger swagger-ui nestjs

我正在开发基于 NestJS 的 api,并且正在使用 Swagger UI 文档。我想为我的所有控制器保留 @ApiBearerAuth() 的功能,但我希望将其作为全局功能。这样,每次我创建新的路线或端点时,它都会被覆盖。

来自https://docs.nestjs.com/openapi/security文档:

@ApiBearerAuth()
@Controller('cats')
export class CatsController {}
Run Code Online (Sandbox Code Playgroud)

这就是我现在正在关注的内容,但是有没有办法在全球范围内进行设置?

小智 6

@nestjs/swagger在其可见的源代码中,将addBearerAuth()安全性设置name为“承载”,因此可以使用addBearerAuth()and addSecurityRequirements('bearer')

const config = new DocumentBuilder()
  ...
  .addBearerAuth()
  .addSecurityRequirements('bearer')
  .build();
Run Code Online (Sandbox Code Playgroud)


小智 0

这是一个小技巧,因为我在每个控制器中使用 ApiTags,以便创建一个新的装饰器

import { applyDecorators } from '@nestjs/common';

export function ApiTagsAndBearer(...tags: string[]) {
  return applyDecorators(
    ApiBearerAuth(), //
    ApiTags(...tags),
  );
}
Run Code Online (Sandbox Code Playgroud)