Передача параметров промежуточному программному обеспечению Echo route

Как передать параметр промежуточному программному обеспечению в 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 ответ

Решение

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

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"))
Другие вопросы по тегам