英文:
Accessing route in middleware using Gin
问题
我有一个在我的 Golang API 中的 user.save
路由(如下所示),可以根据请求对象中是否提供了 id
来进行用户的 创建
和 更新
。该路由使用了 auth
中间件,其他路由也使用了该中间件。
api.POST("/user.save", auth(), user.Save())
api.POST("/user.somethingElse", auth(), user.SomethingElse())
这是我的中间件:
func auth() gin.HandlerFunc {
return func(c *gin.Context) {
// 我想在这里知道是否调用了 user.save 路由
// 进行身份验证操作
}
}
我在考虑,如果我能在 auth
中间件中检测到是否调用了 user.save
路由,那么我就可以检查是否包含了 id
,并决定是继续执行还是返回。
英文:
I have a user.save
route (below) in my Golang API that can be used to create
and update
a user depending on whether an id
was provided in the request object. The route uses the auth
middleware which other routes do too.
api.POST("/user.save", auth(), user.Save())
api.POST("/user.somethingElse", auth(), user.SomethingElse())
Here is my middleware:
func auth() gin.HandlerFunc {
return func(c *gin.Context) {
//I would like to know here if user.save was the route called
//do authy stuff
}
}
I'm thinking that if I can detect in the auth
middleware whether the user.save
route was called I can then check to see if an id
was included and decide whether to continue or return.
答案1
得分: 8
你可以从授权处理程序中检查URL。实际请求在上下文中,所以很容易实现:
if c.Request.URL.Path == "/user.save" {
// 做你的事情
}
另一种解决方案是将授权中间件参数化,类似于这样:
api.POST("/user.save", auth(true), user.Save())
api.POST("/user.somethingElse", auth(false), user.SomethingElse())
func auth(isUserSave bool) gin.HandlerFunc {
return func(c *gin.Context) {
if isUserSave {
// 做你的事情
}
}
}
英文:
You could check the url from the auth handler. The actual request is on the context, so it's as easy as:
if c.Request.URL.Path == "/user.save" {
// Do your thing
}
Another solution is to parameterize your auth middleware, something like this:
api.POST("/user.save", auth(true), user.Save())
api.POST("/user.somethingElse", auth(false), user.SomethingElse())
func auth(isUserSave bool) gin.HandlerFunc {
return func(c *gin.Context) {
if isUserSave {
// Do your thing
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论