When using Gin framework for Go, I’m writing some custom middleware. One of my new middleware will evaluate if the request coming in is from my front-end SPA. If it is, I want to also use the sessions middleware to create/load the user session info. If it is not, then I don’t want to call that middleware.
I can’t seem to find how (if possible) to do this. I was hoping I could either use an IF block when I’m defining my router.Use(xyz) statements, or better yet, tell my current middleware to load another one before I call the c.Next().
Example:
func MyMiddleware(c *gin.Context) {
isFromFrontend := myFunctionToDetermine()
c.Set("isFromFrontend", isFromFrontend)
if isFromFrontend {
<here is where i'd like to effectively call r.Use() again and pass the session middleware>
}
c.Next()
}
r := gin.Default()
r.Use(MyMiddleware)
I tried the other method of defining middleware where I:
- created a new function for MyMiddleware that accepts an instance of the router, so that I can try to call the .Use() method again from within my middleware; it doesn’t error but it also doesn’t seem to call it. I’m guessing that the middleware chain is already established before it is evaluated?
Is there a way to add a new middleware to the existing chain before it finishes processing?
Or is there maybe some other entirely different way to accomplish what I’m doing?
Poseidon is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.