我有一个项目要求,其中我想不允许某些API端点不需要身份验证。从搜索中,我发现我需要使用来自NestJS库的NestJS。由于我使用@nestjs/passport
进行身份验证,所以我不知道如何实现setMetadata。
我有以下代码:
sessionKey.guard.ts
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class SessionKeyAuthGuard extends AuthGuard('sessionKey') {}
在控制器文件中
@Controller('api/deployments')
// comment the line below to stop authentication
@UseGuards(SessionKeyAuthGuard)
@UseInterceptors(PreRequestCacheInterceptor)
@UseInterceptors(PostRequsetCachingInterceptor)
export class AppDeployController {
// API methods
}
接下来我能试试什么?
发布于 2022-04-26 01:25:47
创建一个修饰器来设置元数据
export const Public = () => SetMetadata('IS_PUBLIC', true);
在您的控制器中,使用路线上的装饰器来允许公共访问。
export class AuthController {
@Public()
@Post('/login')
login() {
}
}
为了保持警惕,请通过以下方法检查元数据:
const isPublic = this.reflector.getAllAndOverride<boolean>('IS_PUBLIC', [
context.getHandler(),
]);
https://stackoverflow.com/questions/72010644
复制