Как проложить маршрут внутри промежуточного звена го-чи - PullRequest
0 голосов
/ 08 октября 2018

Для проверки авторизации мне нужно знать маршрут внутри промежуточного ПО авторизации.Я проверил документы из го-чи и сделал это так:

func Authenticator(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    // .............
    next.ServeHTTP(w, r)
    routePattern := chi.RouteContext(r.Context()).RoutePattern()
    fmt.Println("AUTHORIZATION:", routePattern, route)

    routepath := strings.Replace(routePattern, "/v1", "", 1) // todo use api prefix from config
    routepath = strings.Replace(routepath, "/*", "", 1)

    fmt.Println("ROUTEPATH:", routepath, route)

    if !CheckAuthorization(*token, routepath, method, "*", "*", "*") {
        http.Error(w, http.StatusText(401), 401)
        return
    }

    })
}

, что дает мне то, что мне нужно.Но теперь очевидно, что авторизация пройдена, поэтому, если проверка на обработчик routepattern уже выполнена (запись результата клиенту)

Есть ли другой способ получить маршрут внутри промежуточного программного обеспечения без next.ServerHTTP (w, r)перед проверкой RoutePattern ()?

1 Ответ

0 голосов
/ 11 октября 2018

Разрешено на основе https://medium.com/@szablowska.patrycja/chi-and-missing-urlparam-in-middleware-9435c48a063b

r := chi.NewRouter()
r.Route("/myroute", func(r chi.Router) {
    r.With(myMiddleware).Route("/{myparam}", func(r chi.Router) {
        r.Get("/", getHandler)
        r.Put("/", putHandler)
    })
})
...