2

如何将参数传递给 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"))
4

1 回答 1

7

您可以使用闭包将参数提供给中间件,如下所示:

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"))
于 2019-10-03T06:54:12.310 回答