Middlewares spécifiques à une route avec Negroni : personnalisation de l'authentification
Dans une application Web utilisant httprouter et Negroni, il peut être nécessaire d'appliquer un middleware à des itinéraires spécifiques tout en en excluant d’autres. Par exemple, un middleware d'authentification peut être utilisé pour vérifier l'état de connexion de l'utilisateur, mais cela peut ne pas être nécessaire pour certaines pages.
Negroni offre un moyen polyvalent de gérer un middleware spécifique à un itinéraire. La solution consiste à créer des instances Negroni distinctes pour chaque route où un middleware unique est souhaité.
Dans l'exemple de code fourni, la route /login ne devrait pas nécessiter d'authentification, contrairement à la route /. Voici comment y parvenir :
<code class="go">router := httprouter.New() router.Handler("GET", "/login", negroni.New(negroni.HandlerFunc(loginHandler))) router.Handler("GET", "/", negroni.New(authenticator.Get(), negroni.HandlerFunc(indexHandler))) server := negroni.Classic() server.UseHandler(router) server.Use(sessions.Sessions("example-web-dev", cookiestore.New([]byte("some secret")))) server.Run(":3000")</code>
En créant des instances Negroni distinctes pour chaque route, le développeur peut appliquer différentes chaînes de middleware à différentes parties de l'application. Dans ce cas, la route /login utilisera uniquement le middleware fourni par negroni.Classic() et le middleware de sessions ajouté au serveur, tandis que la route / utilisera en plus le middleware créé dans Authenticator.Get().
LoginHandler et indexHandler doivent suivre une signature de méthode spécifique :
<code class="go">func(http.ResponseWriter, *http.Request, http.HandlerFunc)</code>
Cette approche offre une évolutivité à mesure que l'application se développe et permet une gestion facile des exigences de middleware spécifiques à l'itinéraire.
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!