Impossible d'arrêter la chaîne middleware dans Go/Gin
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.
Contenu de la question
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
Solution de contournement
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Utilisation de Golang pour implémenter Linux ...

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Analyse de l'état d'audience du cadre GO dans l'écosystème de programmation GO actuel, les développeurs sont souvent confrontés à choisir le bon cadre pour répondre aux besoins de leurs entreprises. Aujourd'hui, nous ...

Stratégie d'optimisation des performances pour l'accès à URL massif du langage GO Cet article propose une solution d'optimisation des performances pour le problème de l'utilisation du langage GO pour traiter l'accès massif de l'URL. Programmes existants de CSV ...

La bonne façon d'implémenter le stockage efficace de la paire de valeurs de clé dans le langage go comment obtenir les meilleures performances lors du développement de la mémoire de paire de valeurs clés similaire à Redis dans le langage Go ...

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

L'ordre d'exécution de la fonction init () dans le langage Go dans la programmation Go, la fonction init () est une fonction spéciale, qui est utilisée pour exécuter certaines fonctions nécessaires lors de l'initialisation du package ...
