gpt4 book ai didi

graphql - 为 GraphQL 中的所有查询添加 schema 指令

转载 作者:行者123 更新时间:2023-12-02 07:26:51 26 4
gpt4 key购买 nike

  1. 有没有办法通过重写 SchemaDirectiveVisitor 的方法之一来添加模式指令所有查询和突变?例如,检查指令中的身份验证 token 。最好只添加一次,而不是为每个定义的查询/突变添加它。
  2. 如果是,应覆盖以下哪一个方法以及如何覆盖?我无法找到有关如何覆盖它们的示例。

    • visitSchema(schema: GraphQLSchema)
    • visitScalar(scalar: GraphQLScalarType)
    • visitObject(object: GraphQLObjectType)
    • visitFieldDefinition(field: GraphQLField<any, any>)
    • visitArgumentDefinition(argument: GraphQLArgument)
    • visitInterface(iface: GraphQLInterfaceType)
    • visitUnion(union: GraphQLUnionType)
    • visitEnum(type: GraphQLEnumType)
    • visitEnumValue(value: GraphQLEnumValue)
    • visitInputObject(object: GraphQLInputObjectType)
    • visitInputFieldDefinition(field: GraphQLInputField)

我的直觉是 visitObject(object: GraphQLObjectType)type QueryGraphQLObjectType .

  • 什么是 DirectiveLocation到底?对象还是查询/突变?
  • 最佳答案

    要访问对象(你是对的 Query 是),请使用 visitObject ,对于特定的 api 端(Query 中的任何方法),请使用 visitFieldDefinition我已经通过以下方式实现了它,

    class authDirective extends SchemaDirectiveVisitor {
    visitObject(type) {
    this.ensureFieldsWrapped(type);
    type._requiredAuthRole = this.args.requires;
    }

    visitFieldDefinition(field, details) {
    this.ensureFieldsWrapped(details.objectType);
    field._requiredAuthRole = this.args.requires;
    }
    ensureFieldsWrapped(objectType){
    const fields = objectType.getFields();
    //your logic to resolve directive
    }
    }
    module.exports = authDirective;

    在 graphQL 模式中

    directive @authorization(requires: Role) on OBJECT | FIELD_DEFINITION

    在架构构建器或服务器中包含

    resolvers,
    schemaDirectives: {
    authorization: authDirective
    }

    关于graphql - 为 GraphQL 中的所有查询添加 schema 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54123352/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com