2015-12-23 24 views
1

我的Golang API中有一個user.save路由,它可用於createupdate用戶,具體取決於請求對象中是否提供了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) { 
     //I would like to know here if user.save was the route called 
     //do authy stuff 
    } 
} 

我在想,如果我能在auth中間件user.save路線是否被稱爲檢測我可以再檢查,看是否id被列入和決定是繼續還是返回。

+1

我會改變我的路線是多一點REST喜歡。例如:'POST/users'會創建一個用戶,'PUT/users/{userID}'會更新用戶。然後,您可以將適當的中間件應用於每條路線。 – jmaloney

回答

3

您可以從auth處理程序中檢查url。實際的請求上下文,所以它是那麼容易,因爲:

if c.Request.URL.Path == "/user.save" { 
    // Do your thing 
} 

另一個解決方案是參數的AUTH中間件,像這樣:

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 
     } 
    } 
}