在 NestJS 上使用 'useGlobalGuards' 时排除端点
Exclude endpoints when using 'useGlobalGuards' on NestJS
我刚开始在我的 main.ts 文件上使用 useGlobalGuards
方法:
[...]
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({
transform: true,
}))
app.useGlobalGuards(new AuthGuard)
[...]
因此,所有端点都在使用我的 AuthGuard,如果请求 header 上没有有效的授权令牌,它会抛出 401 错误...在此之前,我在每个 class 上使用 @UseGuards(AuthGuard)
,所以如果我想做一个 public api(比如用户创建),我只需要删除这个装饰器。
是否可以使用 useGlobalGuards
并且仍然只有少数 public api 不需要身份验证令牌? (useGlobalPipes
方法的相同问题)
This is a common use case described in the docs.
本质上,您需要为端点创建某种元数据,允许使用 publicly 使用 @SetMetadata()
或自定义装饰器,并在守卫中读取该元数据。如果元数据存在,则应将其视为 public 路由并应跳过身份验证。
我刚开始在我的 main.ts 文件上使用 useGlobalGuards
方法:
[...]
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({
transform: true,
}))
app.useGlobalGuards(new AuthGuard)
[...]
因此,所有端点都在使用我的 AuthGuard,如果请求 header 上没有有效的授权令牌,它会抛出 401 错误...在此之前,我在每个 class 上使用 @UseGuards(AuthGuard)
,所以如果我想做一个 public api(比如用户创建),我只需要删除这个装饰器。
是否可以使用 useGlobalGuards
并且仍然只有少数 public api 不需要身份验证令牌? (useGlobalPipes
方法的相同问题)
This is a common use case described in the docs.
本质上,您需要为端点创建某种元数据,允许使用 publicly 使用 @SetMetadata()
或自定义装饰器,并在守卫中读取该元数据。如果元数据存在,则应将其视为 public 路由并应跳过身份验证。