X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/063eb858429a7472c888261d0512fd960e92b7ae..f94ac6e8ad9aec3c781cd71b72fcc5e2c1cedd8d:/sdk/go/auth/handlers.go diff --git a/sdk/go/auth/handlers.go b/sdk/go/auth/handlers.go index 7b1760f4b8..b638f79825 100644 --- a/sdk/go/auth/handlers.go +++ b/sdk/go/auth/handlers.go @@ -9,16 +9,17 @@ import ( "net/http" ) -type contextKey string - -var contextKeyCredentials contextKey = "credentials" +type contextKeyCredentials struct{} // LoadToken wraps the next handler, adding credentials to the request // context so subsequent handlers can access them efficiently via // CredentialsFromRequest. func LoadToken(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - next.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), contextKeyCredentials, CredentialsFromRequest(r)))) + if _, ok := r.Context().Value(contextKeyCredentials{}).(*Credentials); !ok { + r = r.WithContext(context.WithValue(r.Context(), contextKeyCredentials{}, CredentialsFromRequest(r))) + } + next.ServeHTTP(w, r) }) }