Dans le monde de PHP, la chaîne middleware est un modèle de développement courant, qui peut nous aider à traiter les demandes, à effectuer des vérifications et des autorisations, etc. Cependant, dans Gin, le framework web Go, la chaîne middleware fonctionne un peu différemment. Il utilise une chaîne de middleware imparable, c'est-à-dire que chaque middleware sera exécuté indépendamment du fait qu'il y ait ou non une erreur dans le middleware précédent. Bien que cette conception augmente la complexité du code, elle offre également une plus grande flexibilité et personnalisation. Cet article vous donnera une introduction détaillée au principe de fonctionnement et à l'utilisation de la chaîne middleware dans le framework Gin par l'éditeur PHP Apple.
Je souhaite vérifier la session avant de procéder à la demande et j'ai un middleware pour vérifier la session. C'est le point final :
profile.use(session.checksession()) profile.get("/:pid", func(c *gin.context) { fmt.println("hit :pid") c.file("../../html/profile.html") })
Il s'agit d'un checksession()
middleware, la valeur est un espace réservé atm :
func CheckSession() gin.HandlerFunc { return func(c *gin.Context) { session := sessions.Default(c) userID := session.Get("user_id") firstName := session.Get("firstname") lastName := session.Get("lastname") if userID == nil || firstName == nil || lastName == nil { fmt.Println("No session") c.Redirect(http.StatusSeeOther, "/sign-in") return } fmt.Println("Hit c.Next()") c.Next() } }
Journal :
D'abord, je clique "/"
路由,该路由重定向到 /profile/:pid
端点,该端点在“无效”会话的情况下重定向到 /sign-in
端点。我被重新路由到 /sign-in
端点,但 /profile/:pid
端点仍然完成执行,即使没有点击 c.next()
J'ai essayé de les insérer if-else
块中,以确保仅 c.redirect()
和 c.next()
L'un d'eux est en cours d'exécution et cela se produit, mais la fonction passe toujours et la chaîne ne s'arrête pas
L'erreur est causée par le fait de ne pas abandonner manuellement la chaîne de middleware.
c.Redirect()
不会停止中间件链,您应该手动调用 c.Abort()
pour empêcher l'exécution des gestionnaires restants.
c.Abort()
Astuce :
Abort empêche l'appel des gestionnaires en attente. Notez que cela n'arrête pas le gestionnaire actuel. Supposons que vous disposiez d'un middleware d'autorisation qui vérifie que la demande actuelle est autorisée. Si l'autorisation échoue (par exemple : incompatibilité de mot de passe), appelez Abort pour vous assurer que les gestionnaires restants de cette demande ne sont pas appelés.
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!