Получите имя запроса из запроса в "github.com/graphql-go/graphql"
Я создаю 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 ответ
Решение
Это json - вы можете проверить, содержит ли [строка] login
...
... но это о безопасности... вы обходите...
- проверьте, содержит ли запрос только запрос входа в систему, без других инъекций (без побочных / параллельных запросов)... (разделить новые строки / белые символы... регулярное выражение)... точная фраза - должна быть полностью равна предопределенному шаблону, также длина!!!
- и имеет необходимые переменные