Как проложить маршрут внутри промежуточного звена го-чи
Для проверки авторизации мне нужно знать маршрут внутри промежуточного ПО авторизации. Я проверил документы от го-чи и сделал это так:
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 ответ
Решение
Решено на основе 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)
})
})