Hello I am working on a rest api using golang with gin as a router. Also I am using jwt authentication process for the api. I saved the token to the encrypted session which indicates whether or not they are logged in. I would like to use a middleware to verify whether or not this token exists, and then kick the user back to the login page if it does not. I want to exclude some routes from using the authentication middleware. I have some of my routes in which I don't want the authentication middleware. Can anybody know how I can achieve this? Right now I have tried the following code under middleware:
if c.Request.URL.Path != "/api/v1/login" && c.Request.URL.Path != "/api/v1/signup" && c.Request.URL.Path != "/api/v1/signup"{
// authentication process
}
I have number of routes and all are using the same group "/api/v1/".
What is the best way to ignore the authentication middleware from some of the routes.
Comment From: hellorachid
@Swatiparbhakar you can achieve that using Groups. i hope this code helps you :
r := gin.New()
// CORS
r.Use(middlewares.Cors())
r.Use(ginrus.Ginrus(loggers.LoggerImpl, time.RFC3339, true))
// Recovery middleware
r.Use(gin.Recovery())
/* --------------------------- Public routes --------------------------- */
public := r.Group("/api/v1")
public.Use(middlewares.DbCloneSession(ds))
public.Use(gzip.Gzip(gzip.DefaultCompression))
public.POST("/login", controllers.Login)
/* --------------------------- Private routes --------------------------- */
private := r.Group("/api/v1")
private.Use(middlewares.DbCloneSession(ds))
// here im using JWT
private.Use(middlewares.Jwt())
private.Use(gzip.Gzip(gzip.DefaultCompression))
Comment From: Swatiparbhakar
@hellorachid Thank you for your reply. Your solution is perfect for my requirement. Thanks!!! I want to ask one more thing: Is it required to use cors middleware with the routes? What are there benefits in the api's?
Comment From: CharryLee0426
@Swatiparbhakar you can achieve that using Groups. i hope this code helps you :
``` r := gin.New()
// CORS r.Use(middlewares.Cors()) r.Use(ginrus.Ginrus(loggers.LoggerImpl, time.RFC3339, true))
// Recovery middleware r.Use(gin.Recovery())
/* --------------------------- Public routes --------------------------- */
public := r.Group("/api/v1") public.Use(middlewares.DbCloneSession(ds)) public.Use(gzip.Gzip(gzip.DefaultCompression))
public.POST("/login", controllers.Login)
/ --------------------------- Private routes --------------------------- /
private := r.Group("/api/v1") private.Use(middlewares.DbCloneSession(ds)) // here im using JWT private.Use(middlewares.Jwt()) private.Use(gzip.Gzip(gzip.DefaultCompression)) ```
Thank you! This works for me.
Comment From: bidianqing
@Swatiparbhakar you can achieve that using Groups. i hope this code helps you :
``` r := gin.New()
// CORS r.Use(middlewares.Cors()) r.Use(ginrus.Ginrus(loggers.LoggerImpl, time.RFC3339, true))
// Recovery middleware r.Use(gin.Recovery())
/* --------------------------- Public routes --------------------------- */
public := r.Group("/api/v1") public.Use(middlewares.DbCloneSession(ds)) public.Use(gzip.Gzip(gzip.DefaultCompression))
public.POST("/login", controllers.Login)
/ --------------------------- Private routes --------------------------- /
private := r.Group("/api/v1") private.Use(middlewares.DbCloneSession(ds)) // here im using JWT private.Use(middlewares.Jwt()) private.Use(gzip.Gzip(gzip.DefaultCompression)) ```
Please tell me what todo? thank you
app := gin.Default()
app.Use(middleware.jwt)
/* --------------------------- Public routes --------------------------- */
app.POST("/users",userHandler)
/* --------------------------- Private routes --------------------------- */
app.POST("/login",loginHandler)
app.Run()