NestJS 项目实战-权限管理系统开发(十一)

179 阅读1分钟

本系列教程将教你使用 NestJS 构建一个生产级别的 REST API 风格的权限管理后台服务【代码仓库地址】。

在线预览地址】账号:test,密码:d.12345

本章节内容: 1. Helmet;2. 接口限流。

Helmet

helmet 库可以通过适当设置 HTTP 标头来帮助保护你的应用免受一些众所周知的 Web 漏洞的侵害。

提示:请注意,将 helmet 应用为全局或注册它必须先于对 app.use() 的其他调用或可能调用 app.use() 的设置函数。

首先安装所需的包:

pnpm add helmet

然后在 /src/main.ts 中引入:

image.png

接口限流

安装相应库

运行以下命令,安装 @nestjs/throttler 库。

pnpm add @nestjs/throttler

添加配置

打开 .env.development 文件并添加以下配置:

# throttle
THROTTLE_TTL=10000
THROTTLE_LIMIT=30

然后再在 /src/common/config/index.tsgetBaseConfig 方法返回的对象中添加以下配置:

  throttle: {
    ttl: +configService.get<number>('THROTTLE_TTL'),
    limit: +configService.get<number>('THROTTLE_LIMIT'),
  },

异步配置节流阀

打开 app.module.ts 文件并添加以下内容:

...
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';

@Module({
  imports: [
    ...
    ThrottlerModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (config: ConfigService) => [
        {
          ttl: getBaseConfig(config).throttle.ttl,
          limit: getBaseConfig(config).throttle.limit,
        },
      ],
    }),
  ],
  providers: [
    {
      provide: APP_GUARD,
      useClass: ThrottlerGuard,
    },
    ...
  ],
})
export class AppModule {}

现在我们就为所有接口加上了一个10秒内不能超过30次请求的限制。