2015-12-23 3 views
1

У меня есть user.save маршрута (ниже) в моем Golang API, который может быть использован для create и update пользователя в зависимости от того, был ли id предусмотрен в объекте запроса. Маршрут использует промежуточное программное обеспечение auth, которое также выполняет другие маршруты.Доступ маршрута промежуточного слоя с помощью Gin

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

Я хотел бы изменить свои маршруты, чтобы быть немного больше ОТДЫХ. что-то вроде: 'POST/users' создаст пользователя, а' PUT/users/{userID} 'будет обновлять пользователя. Затем вы можете применить соответствующее промежуточное ПО к каждому маршруту. – jmaloney

ответ

3

Вы можете проверить URL-адрес у обработчика auth. Фактический запрос от контекста, так что это так же просто, как:

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

Другим решением является параметризация вашей аутентификации промежуточного уровня, что-то вроде этого:

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