NestJS在@ResolveProperty守护中访问HTTP请求?

时间:2018-05-17 14:15:41

标签: javascript typescript graphql apollo nestjs

我正在使用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,但我发现在使用守卫时,在GraphQL解析器上下文中,context.switchToHttp().getRequest()只返回父Query()的结果......

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

0 个答案:

没有答案