首页 > 解决方案 > NestJS 在@ResolveProperty 防护中访问HTTP 请求?

问题描述

我正在使用 Nest JS 开发 Graphql API(我刚刚将其升级到 5.0.0),其中我只需要允许某些用户(按角色)访问公共查询的子部分。

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';

@Injectable()
export class RolesGuard implements CanActivate {
    constructor(private readonly reflector: Reflector) {}

    canActivate(context: ExecutionContext): boolean {

        const req = context.switchToHttp().getRequest();

        const roles = this.reflector.get<string[]>('roles', context.getHandler());
        if (!roles) // if no roles specified
            return true;

        console.log(req); // Displays Query() parent result instead of HTTP Request Object

        return false;
    }
}

查询的子部分由@ResolveProperty()修饰函数处理。

按照我开始使用Guards的文档,但我刚刚发现在使用Guards时,在GraphQL解析器上下文中,context.switchToHttp().getRequest()它只返回父Query()的结果......

我真的不知道这是否是预期的行为,如果是,是否有办法从 GraphQL Guard 访问完整的 express Request 对象?

标签: javascripttypescriptgraphqlapollonestjs

解决方案


推荐阅读