Home >Backend Development >Golang >Unable to stop middleware chain in Go/Gin
In the PHP world, middleware chain is a common development model, which can help us process requests, perform verification and authorization operations, etc. However, in Gin, the Go web framework, the middleware chain operates a little differently. It uses an unstoppable middleware chain, that is, each middleware will be executed regardless of whether there is an error in the previous middleware. Although this design increases the complexity of the code, it also provides greater flexibility and customizability. This article will give you a detailed introduction to the working principle and usage of the middleware chain in the Gin framework by PHP editor Apple.
I want to check the session before proceeding with the request, and I have a middleware to check the session. This is the endpoint:
profile.use(session.checksession()) profile.get("/:pid", func(c *gin.context) { fmt.println("hit :pid") c.file("../../html/profile.html") })
This is checksession()
middleware, the value is a placeholder 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() } }
log:
First, I hit the "/"
route, which redirects to the /profile/:pid
endpoint, which redirects to # in case of an "invalid" session ##/sign-in Endpoint. I'm being rerouted to the
/sign-in endpoint, but the
/profile/:pid endpoint still completes execution even without clicking
c.next()
if-else block to ensure that only one of
c.redirect() and
c.next() is executing , and is happening, but the function still passes and the chain is not stopped.
c.Redirect() does not stop the middleware chain, you should manually call
c.Abort() to prevent the remaining handlers from executing.
c.Abort() Tool tip:
The above is the detailed content of Unable to stop middleware chain in Go/Gin. For more information, please follow other related articles on the PHP Chinese website!