Доступ к маршруту в промежуточном программном обеспечении с использованием Gin

У меня есть user.save маршрут (см. Ниже) в моем API Golang, который можно использовать для create и update пользователя в зависимости от того, был ли 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, и решить, продолжить или вернуться.


person tommyd456    schedule 23.12.2015    source источник
comment
Я бы изменил свои маршруты, чтобы они были немного больше похожи на REST. что-то вроде: POST /users создаст пользователя и PUT /users/{userID} обновит пользователя. Затем вы можете применить соответствующее промежуточное ПО к каждому маршруту.   -  person jmaloney    schedule 23.12.2015


Ответы (1)


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

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
        }
    }
}
person Alex Guerra    schedule 23.12.2015