import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { JwtAuthGuard } from './JwtAuthGuard'; @Injectable() export class GlobalAuthGuard implements CanActivate { constructor( private reflector: Reflector, private jwtAuthGuard: JwtAuthGuard, ) {} async canActivate(context: ExecutionContext): Promise { // 检查是否有 @Public() 装饰器 const isPublic = this.reflector.getAllAndOverride('isPublic', [ context.getHandler(), context.getClass(), ]); if (isPublic) { return true; } // 对于需要认证的接口,使用 JWT 认证 const result = this.jwtAuthGuard.canActivate(context); // 处理 Promise 类型 if (result instanceof Promise) { return await result; } return result as boolean; } }