NestJS 守卫-校验权限

Posted by CodingWithAlice on March 6, 2025

NestJS 守卫-校验权限

NestJS 中的组件有:中间件、守卫、拦截器、管道、拦截器(还有个过滤器

权限功能以守卫组件承载

【Step1:创建 auth.guard.ts】

@Injectable()
export class AuthGuard implements CanActivate {
    canActivate(context) {
        const request = context.switchToHttp().getRequest();
        return validateRequest(request); // 校验函数
    }
}

function validateRequest(request: Request): boolean {
    const headers = request.headers;
    if (
        headers?.authorization !== process.env.CHECK_AUTH &&
        request.method === 'POST'
    ) {
        throw new UnauthorizedException('达咩!你没有权限操作哦!');
    }
    return true;
}

【Step2:只限制 POST 请求需要校验权限】 - 在控制器中使用 @UseGuards

// ltns.controller.ts
@Controller('api/ltn')
export class LtnController {
    constructor(private readonly ltnService: LtnService) {}
    
    @Post('add')
    @UseGuards(AuthGuard)
    add(@Body() data) {
        return this.ltnService.addLtn(data);
    }
}