Я работаю над небольшой демонстрацией, которая пытается объяснить, как работает базовый c обработчик HTTP, и я нашел следующий пример:
package main
func router() *mux.Router {
router := mux.NewRouter()
auth := router.PathPrefix("/auth").Subrouter()
auth.Use(auth.ValidateToken)
auth.HandleFunc("/api", middleware.ApiHandler).Methods("GET")
return router
}
func main() {
r := router()
http.ListenAndServe(":8080", r)
}
package auth
func ValidateToken(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var header = r.Header.Get("secret-access-token")
json.NewEncoder(w).Encode(r)
header = strings.TrimSpace(header)
if header == "" {
w.WriteHeader(http.StatusForbidden)
json.NewEncoder(w).Encode("Missing auth token")
return
}
if header != "SecretValue" {
w.WriteHeader(http.StatusForbidden)
json.NewEncoder(w).Encode("Auth token is invalid")
return
}
json.NewEncoder(w).Encode(fmt.Sprintf("Token found. Value %s", header))
next.ServeHTTP(w, r)
})
}
package middleware
func ApiHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode("SUCCESS!")
return
}
Все понятно , но у меня всплывают два вопроса:
- Почему не требуется отправлять параметр в этой строке:
secure.Use(auth.ValidateToken)
? - Если я хотел отправить дополнительный параметр к этому
auth.ValidateToken
fun c, (например, строка, для которой этот заголовок должен сравниваться вместо "SecretValue"
), как это можно сделать?
Спасибо за заранее, я немного новичок в использовании golang и хотел узнать больше.