2016-08-30 6 views
1
  1. Meteor.call()メソッドは、クライアント側またはサーバー側の要求に対してのみ使用します。助言してください
  2. 私のアプリでは、Meteor.users()はすべてのユーザーをコンソールに表示します。これを無効にする方法。

答えて

2
  1. あなたは、サーバー側のメソッドを呼び出すために、クライアント側でMeteor.call()を使用する必要があります。流星は素晴らしいですdocumentation about methods

  2. Meteor.users()がクライアント側のすべてのユーザーを返す場合、サーバーはすべてのユーザー文書を公開しています。インストール後に流星autopublish packagemeteor remove autopublish)を削除しましたか?

+0

私はすでにすべてのコレクションを公開していますが、自動公開をまだ削除しています –

+0

ユーザーコレクションを公開している別のパッケージがない限り、パッケージを削除してもそうはなりません。 .meteor/versionsファイルを共有して、Meteor.publish( 'users')経由でユーザーコレクションを公開するサーバーサイドコードがないことを確認してください。 – Matt

0

1 Meteor.call()

Meteor.call()は、典型的には、クライアント側からサーバ側のメソッドを呼び出すために使用されます。ただし、サーバー側のMeteor.call()を使用して別のサーバー側の関数を呼び出すこともできますが、これはお勧めできません。ここで

だからサーバーコール(グッド・プラクティス)サーバーの呼び出しに

  • ServerにMeteor.call()

    • Clientを使用するには、2つの方法があります(よくない習慣が、それは動作します)何が流星docsピンチで言って:

      このメソッドは、 Meteor.callを使用しています。 一部のコード をクライアントから呼び出し可能にする必要がある場合にのみメソッドを使用するようにしてください。 コードをサーバーからのみ呼び出すモジュール化する場合は、メソッドではなく通常の JavaScript関数を使用します。

      2.パブリケーションとサブスクリプション

      は、あなたのデータが安全であることを確認するために、あなたはautopublishinsecureパッケージを削除する必要があります。これにより、コレクションの自動パブリケーションが無効になります。また、クライアントからのデータベースへの自由な書き込みアクセスも禁止されます。

      ここで、コレクションの多くを必要なだけ公開していることを確認するには、出版物を設定する必要があります(または、すでに設定されている場合は調べてください)。

      公開:これは、サーバーからクライアントへのデータベースコレクションを提供するものです。

      それは、プロジェクト内のあなたのapiserverフォルダにそれを探して、次のようになります。上記の例では、我々はMongoDBの呼び出しで任意のフィルタパラメータを提供していない、ということ

      Meteor.publish('allUsers', function() { 
          if (!this.userId) { 
          return this.ready(); 
          } 
          return Meteor.users.find({}); 
      }); 
      

      お知らせを、このパブリケーションはデータベースからすべてのユーザーを持つカーソルを返します。

      Meteor.publish('currentUser', function() { 
          if (!this.userId) { 
          return this.ready(); 
          } 
          return Meteor.users.find({ 
          _id: this.userId 
          }); 
      }); 
      

      ここでは、_idというフィールドをフィルタとして提供しています。これにより、利用可能な項目として現在のユーザオブジェクトのみを持つMeteor.users()のカーソルが返されます。

      サブスクリプション:あなたの出版物にアクセスするには、あなたはこのように、それに対応し、クライアント側のコードのサブスクリプションを呼び出す必要があります:

      Meteor.subscribe('currentUser'); 
      

      あなたはが同時にallUsersに加入していないことを確認します - - 複数のサブスクリプションが両方のサブスクリプションの和集合を提供するためです。そのようにすれば、あなたのクライアント側のmini-mongoにはcurrentUser + allUsers = allUsersがあります。私たちはそれを望んでいません。

      上記を確認したら、クライアント側のコード(またはコンソール)にMeteor.users()を使用して、現在ログインしているユーザーのユーザーデータのみが含まれていることがわかります。

      Publications and Subscriptionsの詳細については、公式文書を参照してください。

  • 関連する問題