ミドルウェアからハンドラーへのデータの受け渡し
設計には、受信リクエストを処理するミドルウェアと http.Handler を返すハンドラーがあります。 。ミドルウェアからハンドラーにデータ、具体的にはリクエスト本文から解析された JSON Web トークンを渡したいと考えています。
これを実現するには、Gorilla のコンテキスト パッケージを利用できます。
import ( "github.com/gorilla/context" ) func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. context.Set(r, "token", token) next.ServeHTTP(w, r) }) } func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") }) }
ミドルウェアを使用する場合は、リクエスト本文を解析し、JWT をリクエスト コンテキストに保存します。次に、ハンドラーでコンテキストから JWT を取得できます。
token := context.Get(r, "token")
これにより、ハンドラーで JWT を再度解析する必要がなくなり、より効率的になります。
更新:
Gorilla コンテキスト パッケージは現在メンテナンス中ですモード。
func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. ctx := context.WithValue(r.Context(), "token", token) next.ServeHTTP(w, r.WithContext(ctx)) }) } func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := r.Context().Value("token") }) }
以上がGolang でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。