如何全局应用 Swagger UI 的 @ApiBearerAuth() 而不是申请每个控制器
Posted
技术标签:
【中文标题】如何全局应用 Swagger UI 的 @ApiBearerAuth() 而不是申请每个控制器【英文标题】:How to globally apply Swagger UI's @ApiBearerAuth() instead of applying for each controller 【发布时间】:2021-01-23 22:20:08 【问题描述】:我正在开发基于 nestJS 的 api,并且我正在使用 Swagger UI 文档。我想为我的所有控制器保留 @ApiBearerAuth() 的功能,但是我希望将其作为全局功能。这样每次我创建新的路由或端点时,它都会被覆盖。
来自https://docs.nestjs.com/openapi/security 文档:
@ApiBearerAuth()
@Controller('cats')
export class CatsController
这是我现在正在关注的,但是有没有办法全局设置它?
【问题讨论】:
我认为默认情况下这是不可能的,但是有一个很棒的库可以帮助你实现它,它的名字是:npmjs.com/package/@golevelup/nestjs-discovery 使用它你应该能够构建自己的模块来制作它没有任何其他问题。 阅读这个包,似乎这可以让我找到使用特定装饰器的所有方法。但是,我似乎无法使用它来查找所有@Controllers,而且看起来也没有一种方法可以添加您想要的装饰器。是否有任何示例/教程。 【参考方案1】:这是一个小技巧,因为我在每个控制器中都使用了 ApiTags,所以我创建了一个新的装饰器
import applyDecorators from '@nestjs/common';
export function ApiTagsAndBearer(...tags: string[])
return applyDecorators(
ApiBearerAuth(), //
ApiTags(...tags),
);
【讨论】:
【参考方案2】:是的,您可以在 DocumentBuilder 中添加:
.addSecurity('ApiKeyAuth',
type: 'apiKey',
in: 'header',
name: 'Authorization',
)
.addSecurityRequirements('ApiKeyAuth')
【讨论】:
以上是关于如何全局应用 Swagger UI 的 @ApiBearerAuth() 而不是申请每个控制器的主要内容,如果未能解决你的问题,请参考以下文章
在 Swagger UI 中,如何自定义 body 输入 ui(模型架构 UI)
如何使用 springfox 在 Swagger UI 中绕过授权
Swagger-UI 和 Ktor 如何导入 swagger.json 或 .yaml 文件并启动 Swagger-UI?