登录
首页 >  Golang >  Go问答

从“github.com/graphql-go/graphql”中的请求中获取查询名称

来源:stackoverflow

时间:2024-04-20 16:18:25 247浏览 收藏

哈喽!今天心血来潮给大家带来了《从“github.com/graphql-go/graphql”中的请求中获取查询名称》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我正在 golang 中创建一个 graphql api 使用 “github.com/gin-gonic/gin” “github.com/graphql-go/graphql” 为了保护我的 api,我将使用 jwt 令牌,并且我想让我的 api 完全是 graphql (唯一允许的路由是 localhost:9000/graphql) 有没有办法从请求中获取查询名称,这样我只会对除登录之外的所有其他查询进行 jwtparsing

我的句柄文件

package graphql

import (
    "fmt"
    "log"

    "*****/graphql/mutations"
    "*****/graphql/queries"
    "github.com/gin-gonic/gin"
    "github.com/graphql-go/graphql"
    "github.com/graphql-go/handler"
)

func Handler() gin.HandlerFunc {

    schema, err := graphql.NewSchema(graphql.SchemaConfig{
        Query: graphql.NewObject(
            graphql.ObjectConfig{Name: "QueryType", Fields: graphql.Fields{
                "book":  queries.BookQuery,
                "books": queries.GetAllBooks,
                "login": queries.Login,
            }},
        ),
        Mutation: graphql.NewObject(
            graphql.ObjectConfig{Name: "MutationType", Fields: graphql.Fields{
                "insertOneBook": mutations.InsertOneBook,
                "updateOneBook": mutations.UpdateOneBook,
                "deleteOneBook": mutations.DeleteOneBook,
            }},
        ),
    })

    if err != nil {

        log.Fatal("error Parsing")
    }

    h := handler.New(&handler.Config{
        Schema:     &schema,
        Pretty:     true,
        GraphiQL:   true,
        Playground: true,
    }) 
    return func(c *gin.Context) {
        // Get the header authorisation
        // fmt.Println(c.Request.Header)
        // authHeader := c.GetHeader("Authorization")

        // Get the token by removing the "Bearer" string
        // tokenString := strings.SplitN(authHeader, " ", -1)
        // fmt.Println("this is token string", tokenString)
        // if len(tokenString) < 2 {
        //  c.AbortWithStatus(http.StatusUnauthorized)
        // } else {
        //  authState := utils.JwtValidate(tokenString[1])
        //  if authState != http.StatusAccepted {
        //      c.AbortWithStatus(authState)
        //  } else {
        //      h.ServeHTTP(c.Writer, c.Request)
        //  }
        // }
        h.ServeHTTP(c.Writer, c.Request)
        // Check is tokens validity

    }
}

解决方案


它是 json - 你可以检查 [string] 是否包含 login ...

...但这与安全有关...您正在绕过...

  • 检查请求是否包含仅登录查询,没有其他注入(无侧面/并行查询)...(删除新行/白色字符...正则表达式)...确切的短语 - 也必须完全等于预定义的模板、长度!!!
  • 并提供了所需的变量

终于介绍完啦!小伙伴们,这篇关于《从“github.com/graphql-go/graphql”中的请求中获取查询名称》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>