2015年2月19日木曜日

Meteorで、「methods」を利用することでセキュアに

Meteorでは、「methods」を利用することで、セキュアにする必要があるようです? クライアントサイドのJavaScriptを書き換えられても問題ないように、メソッド化して、処理を隠蔽化、あるいは、オーバーラップ化して、クライアントサイドの処理をサーバー側で行っている(?)と理解しました。

$ meteor remove insecure
simple-todos.js
Meteor.methods({
  addTask: function (text) {
    // ユーザー認証済みか否かをチェック
    if (! Meteor.userId()) {
      throw new Meteor.Error("not-authorized");
    }

    Tasks.insert({
      text: text,
      createdAt: new Date(),
      owner: Meteor.userId(),
      username: Meteor.user().username
    });
  },
  deleteTask: function (taskId) {
    Tasks.remove(taskId);
  },
  setChecked: function (taskId, setChecked) {
    Tasks.update(taskId, { $set: { checked: setChecked} });
  }
});

Meteor.callを使用してクライアント上のメソッドを呼び出すと、二つのことが並行して行われます。

  1. クライアントは、AJAXリクエストが動作するのと同じように、セキュアな環境でメソッドを実行するため、サーバーに要求を送信します。
  2. サーバーの呼び出しの結果を予測し、クライアント上で直接実行されます。

サーバから結果が戻って来る前に、新しく作成したタスクは、画面に表示されているというメリットがあります。

実際に設定してみたサイトがこちら

0 件のコメント:

コメントを投稿