Passando dados de middleware para manipuladores
Em seu design, você tem um middleware que processa uma solicitação recebida e manipuladores que retornam um http.Handler . Você deseja passar dados do middleware para os manipuladores, especificamente um token da web JSON analisado a partir do corpo da solicitação.
Para conseguir isso, você pode utilizar o pacote de contexto do Gorilla:
import ( "github.com/gorilla/context" ) func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. context.Set(r, "token", token) next.ServeHTTP(w, r) }) } func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") }) }
No middleware, você analisa o corpo da solicitação e armazena o JWT no contexto da solicitação. Então, no manipulador, você pode recuperar o JWT do contexto:
token := context.Get(r, "token")
Isso permite evitar a análise do JWT novamente em seus manipuladores, o que é mais eficiente.
Atualização:
O pacote de contexto Gorilla está atualmente em modo de manutenção.
func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. ctx := context.WithValue(r.Context(), "token", token) next.ServeHTTP(w, r.WithContext(ctx)) }) } func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := r.Context().Value("token") }) }
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3