私はhttps://github.com/kataras/iris golang web frameworkを使用しています。表示するユーザー情報を取得する - Golang Template
- ここに今すぐユーザー登録
- ユーザー確認済み
- セッションにログイン&を作成し、ユーザーにキー
username
で設定します(表&構造体)username
、 - :私は事の下に行っていますログインユーザーのための私のコードです: -
// Loaded All DB and other required value above
allRoutes := app.Party("/", logThisMiddleware, authCheck) {
allRoutes.Get("/", func(ctx context.Context) {
ctx.View("index.html");
});
}
今authcheckミドルウェアで
func authcheck(ctx context.Context) {
// Loaded session.
// Fetched Session key "isLoggedIn"
// If isLoggedIn == "no" or "" (empty)
// Redirected to login page
// else
ctx.Next()
}
マイセッション機能
func connectSess() *sessions.Sessions {
// Creating Gorilla SecureCookie Session
// returning session
}
、私の問題は、私は、テンプレート内のすべてのルートにログインしたユーザーの価値を共有しないか、です。私の現在のオプションは次のとおりです。 -
// Loaded all DB and required value
allRoutes := app.Party("/", logThisMiddleware, authCheck) {
allRoutes.Get("/", func(ctx context.Context) {
// Load Session again
// Fetch username stored in session
// Run Query against DB
// Share the user struct value.
// Example ctx.ViewData("user", user)
ctx.View("index.html");
});
allRoutes.Get("dashboard", func(ctx context.Context) {
// Load Session again
// Fetch username stored in session
// Run Query against DB
// Share the user struct value.
// Example ctx.ViewData("user", user)
ctx.View("index.html");
});
}
しかし、上記のコードの問題は、私は各ルートのためのセッションを書き、私が実行し、各ルートのためにとシェアよりも、もう一度クエリを実行する必要がありますされています。
authCheck
ミドルウェアと2番めのallRoutes.Get
ルートにそれぞれ1回ずつセッションをロードするのではなく、より良い方法が必要です。
私はこれを最適化することができ、ユーザデータは単にコードを一度書いて、それが簡単にあなたが作るためにctx.Values().Set/Get
を使用することができます各ルートについては、以下
// Load Session again
// Fetch username stored in session
// Run Query against DB
// Share the user struct value.
// Example ctx.ViewData("user", user)
うわー!それは簡単でした! 'userルート'と 'allRoutes'と' adminルート 'と' adminRoutes'を区別しようとしていたので、 'Party'を使用することにも何らかの害があります。それを使ってパフォーマンス上の問題はありますか? –
'app.Use'を使って、デフォルトのタイトル、ホスト、レイアウトファイル、設定テーブルのデータを共有しました。 'app.Party'を避けることをお勧めしますか?もしそうなら、私に知らせてください、なぜ! –
いいえ、あなたがルートルートのために 'パーティー(Party)をしたいなら、パフォーマンスコストも害はありません。 – kataras