3

I created an Auth directive and passed it to just one query but seems like no query works if that single one fails. This is not the given expectation

What did you expect?

I want only the query to reflect this directive

Minimal graphql.schema and models to reproduce

directive @auth on FIELD_DEFINITION

type Data {
    code: Int!     
    status: String!  
    message: String!   
    packages: [String!]!
}

type PackageData {
    code: Int!     
    status: String!  
    message: String!   
    package: String!
}

type Query {
  completedPackages(limit: Int!, page: Int!): Data!
  getPackage(id: ID!): PackageData!
  activePackages(limit: Int!, page: Int!): Data! @auth
}

func Auth(ctx context.Context, obj interface{}, next graphql.Resolver) (interface{}, error) {
    tokenData, err := middleware.CtxValue(ctx)
    if err != nil {
        return nil, err
    }
    if tokenData == nil {
        return nil, &gqlerror.Error{
            Message: "Access Denied",
        }
    }

    return next(ctx)
}

func GraphqlHandler(db *mongo.Database) gin.HandlerFunc {
    // NewExecutableSchema and Config are in the generated.go file
    // Resolver is in the resolver.go file
    c := generated.Config{Resolvers: &graph.Resolver{Collection: db.Collection("deliveries")}}
    c.Directives.Auth = directives.Auth
    h := handler.NewDefaultServer(
        generated.NewExecutableSchema(c))

    return func(c *gin.Context) {
        h.ServeHTTP(c.Writer, c.Request)
    }
}

versions

  1. go run github.com/99designs/gqlgen 0.17.20?
  2. go version 1.19?
  3. List item
King
  • 1,885
  • 3
  • 27
  • 84

0 Answers0