このシナリオでは、リクエスト本文から JWT を解析するミドルウェアを使用しており、それをハンドラーに渡します。ハンドラーを使用して冗長な解析を回避します。ミドルウェアは http.Handler を返し、ハンドラーも http.Handler を返すため、それらの間で JWT を渡す方法を見つける必要があります。
推奨されるアプローチの 1 つは、Gorilla Mux のコンテキスト パッケージを利用することです。コンテキスト パッケージを使用すると、リクエストに関連付けられた値をタイプセーフな方法で保存できます。
import ( "github.com/gorilla/context" ) // Middleware serves as a wrapper around the next handler. func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. token, err := getTokenFromRequest(r) if err != nil { http.Error(w, "Error getting token", http.StatusInternalServerError) return } context.Set(r, "token", token) next.ServeHTTP(w, r) }) } // Handler retrieves the JWT from the request context. func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") // Use the token in your handler logic. }) }
コンテキスト パッケージを利用すると、解析された JWT をミドルウェア内のリクエスト コンテキストに保存し、簡単にアクセスできます。
更新:
Gorilla コンテキスト パッケージが現在メンテナンス モードになっていることに注目してください。新しいプロジェクトの場合は、Go 1.7 で導入された context.Context() 機能を使用することをお勧めします。これにより、リクエスト コンテキスト データを管理するためのより堅牢かつ効率的な方法が提供されます。
以上がGo でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。