クライアントにコレクションへのアクセスを許可したくないが、クライアントがそのコレクション内のオブジェクトについて特定の質問をできるようにしたいとします。どうすればこれを達成できますか?
例として、現在ログインしているユーザーがいるかどうかを知りたいとします。ユーザーが最初にログインするときに、そのユーザーのデータベースIDをSession
Cookieに設定します。現在、アプリケーションは、ユーザーがログインしていると言っていますが!Session.equals("user_id", null)
、これはもちろん非常に安全ではありません。これは、firebugを開いて言うことができ、Session.set("user_id", "foo")
ログインしているためです。
この時点で、クライアントがUsersコレクションにアクセスできるようにしたくありません。このコレクションにアクセスできる唯一のクライアントコードは、それを保護するために自己実行関数で囲まれています(Meteorでセキュリティを行う正しい方法かどうかはわかりませんので、これらの行に沿って何かをお勧めします同じように)。その代わりに、サーバー側のコードを呼び出して、セッションで設定されたIDを渡し、それが有効なユーザーであるかどうかを教えてもらいたいと思います。
セットアップを確認したいのは次のとおりです。
// client
function logged_in() {
return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}
Meteor.methods
Meteor.call
非同期コールバックを実行するため、法案に適合しないようです。pub / subモデルはもう少し有望に見えますが、ドキュメントからは、それがどのように機能するかはよくわかりません。
クライアントでいくつかの値を設定するために、公開ハンドラー内から呼び出す必要があることを示唆しているようですthis.set
が、それらの値が利用可能になる場所がわかりません。
あるいは、pub / subモデルもこれに適していない可能性があり、私が見逃している別の方法があります。アドバイスをいただければ幸いです。