У меня есть API-интерфейс GraphQL, который я писал в go
и задаюсь вопросом, как управлять аутентификацией JWT, когда вы уже используете context
для передачи источников данных.
Итак, сокращенная версия Моя main
функция:
import (
"net/http"
"github.com/graphql-go/graphql"
gqlhandler "github.com/graphql-go/handler"
)
func queryHandler(ds *sources.DataSources, gql *gqlhandler.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := context.WithValue(context.Background(), sources.CtxSourcesKey, ds)
gql.ContextHandler(ctx, w, r)
})
}
func main() {
apiSchema, _ := schema.CompileSchema(schema.QueryType, schema.MutationType)
gql := gqlhandler.New(&gqlhandler.Config{
Schema: &apiSchema,
GraphiQL: !isDeployed,
Pretty: false,
Playground: false,
})
http.ListenAndServe(":41000", util.CreateChiRouter(healthCheckHandler(), queryHandler(ctxSources, gql)))
}
Как видите, я уже создаю новый экземпляр context
для хранения и передачи карты моих различных источников данных в функции разрешения запросов, но также необходимо иметь возможность анализировать заголовок Authorization
для возможной передачи JWT для аутентифицированных маршрутов.
Каков наилучший способ go об этом, учитывая мою текущую ситуацию? (Объединить JWT с контекстом источников данных? Обрабатывать источники данных по-разному, чтобы освободить context
?)