Передача параметров в промежуточное ПО маршрута Echo - PullRequest
2 голосов
/ 03 октября 2019

Как передать параметр в промежуточное ПО в Echo? Вот пример того, чего я хочу достичь.

func (h *handlers) Check(pm string, next echo.HandlerFunc) echo.HandlerFunc {
    return func(c echo.Context) error {
        if pm == "test" {
            return next(c)
        }
        return echo.NewHTTPError(http.StatusUnauthorized, "")
    }
}

И я хочу установить промежуточное ПО следующим образом:

route.Use(middleware.Check("test input"))

1 Ответ

4 голосов
/ 03 октября 2019

Вы можете использовать замыкание для передачи вашего параметра промежуточному программному обеспечению, например так:

func (h *handlers) Check(adminName string) echo.MiddlewareFunc {
    return func(next echo.HandlerFunc) echo.HandlerFunc {
        return func(c echo.Context) error {
            if c.QueryParam("username") == adminName {
                return next(c)
            }
            return echo.NewHTTPError(http.StatusUnauthorized, "")
        }
    }
}

Здесь промежуточное программное обеспечение проверяет, соответствует ли параметр запроса username параметру промежуточного программного обеспечения adminName. В этом примере любой может получить статус администратора, если знает правильное имя пользователя, поэтому не может быть защищен. Вместо этого вы можете использовать промежуточное программное обеспечение BasicAuth или JWT, оно уже доступно для echo. Посмотрите на echo/middleware/basic_auth.go для лучшего примера.

И вы можете установить промежуточное ПО, как в вашем вопросе:

route.Use(middleware.Check("admin"))
...