Dans ce scénario, vous utilisez un middleware qui analyse un JWT du corps de la requête et souhaitez le transmettre à vos gestionnaires pour éviter une analyse redondante. Étant donné que votre middleware renvoie un http.Handler et que vos gestionnaires renvoient également un http.Handler, il est nécessaire de trouver un moyen de transmettre le JWT entre eux.
Une approche recommandée consiste à utiliser le package de contexte de Gorilla Mux. Le package de contexte vous permet de stocker les valeurs associées à une requête de manière sécurisée.
import ( "github.com/gorilla/context" ) // Middleware serves as a wrapper around the next handler. func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. token, err := getTokenFromRequest(r) if err != nil { http.Error(w, "Error getting token", http.StatusInternalServerError) return } context.Set(r, "token", token) next.ServeHTTP(w, r) }) } // Handler retrieves the JWT from the request context. func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") // Use the token in your handler logic. }) }
En utilisant le package de contexte, vous pouvez stocker le JWT analysé dans le contexte de la requête au sein du middleware et accéder facilement dans vos gestionnaires sans avoir besoin d'une nouvelle analyse.
Mise à jour :
Ça vaut la peine notant que le package contextuel Gorilla est désormais en mode maintenance. Pour les nouveaux projets, il est recommandé d'utiliser la fonctionnalité context.Context() introduite dans Go 1.7, qui offre un moyen plus robuste et efficace de gérer les données contextuelles des requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!