Получить имя запроса из запроса в «github.com/graphql-go/graphql» - PullRequest
1 голос
/ 07 марта 2020

Я создаю API-интерфейс graphql в golang, используя "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

    }
}

1 Ответ

1 голос
/ 08 марта 2020

это json - вы можете проверить, содержит ли [строка] login ...

... но речь идет о безопасности ... вы обходите ...

  • проверка, содержит ли запрос только запрос на вход в систему, без других инъекций (без параллельных / параллельных запросов) ... (лишние строки / белые символы ... регулярное выражение) ... точная фраза - должно быть точно равно предопределенному шаблону, длина тоже !!!
  • и содержит обязательные переменные
...