Meteor を使用して管理パネルを作成しようとしています。管理パネルに関連するjsおよびhtmlファイルを通常のユーザーにロードしたくありません。ユーザーがログインしているときにのみロードする必要があります。どうすればこれを達成できますか? (FlowRouterを使用してルートを管理しています)
2 に答える
まず、実際にファイルをロードするタイミングに注意しましょう。Tracker の計算Meteor.user()
で使用できるリアクティブ データ ソースです。
Tracker.autorun(() => {
if(Meteor.user()) {
loadUserFiles()
}
})
これらのファイルは、HTTP 呼び出し、DOM、jQuery、独自の DDP マジックなどを介してロードできます...
それらをロードする方法はかなり広い問題です。リクエスタがログインユーザーであることをサーバー側で確認してください。
現在、ユースケースに応じて、このような方法でロードしたいファイルの 2 つの異なるカテゴリがあります。
基本的なリソース ファイル
これらには、CSS、画像、HTML、JS、ビデオ、または音楽 (...) ファイルをいじって DOM に追加することが含まれます。これを行う方法は、他のリソース リクエストと似ています。jQuery/Node リクエストの組み合わせで適切に行うための多数のリソースがすでに存在し、Meteor で機能させるために何も変更する必要はありません。HTML リクエストを使用する場合は、サーバー側のユーザー チェックを
行う必要がある場合があります。WebApp.rawConnectHandlers
HTML テンプレート ファイル
これはよりトリッキーです。クライアントが受信したテンプレートにアクセスするのを防ぐ方法はありません。テンプレートはサーバー側でコンパイルされ、JavaScript コードとして送信されるため、一部のユーザーにテンプレートを送信するには、Meteor がファイルをビルドする方法を変更する (または慎重に作成されたパッケージを使用する) 必要があります。これにより、テンプレートを個別にロードできるようになります。
しかし、私はそれが正しいアプローチだとは思いません。テンプレートは、データを表示するための手段にすぎません。データの送信先を制御する場合、ログアウトしたユーザーが保護されたテンプレートにアクセスすると、エラーと空白が表示されます。
テンプレート ヘルパー ファイルは「基本的なリソース」カテゴリに分類されるため、追加のヘルパーをそのようにロードすることは理にかなっています。ログアウトしたクライアントをデッド コードから解放します。