insecureとautopublishパッケージの削除

カテゴリー:Meteor 作成日:2015年2月3日21:55

公開時に危険な insecure パッケージとautopublishパッケージの削除及びその対処方法

insecureパッケージ 

削除方法:

  meteor remove insecure

よくある解説書にはクライアントからサーバへ書き込みできるので危険とある。

私見であるが、クライアントのブラウザーコンソールで色々なコマンドが実効できるのが危険と言う事かな?

こんな対処法をよく見かける

if (Meteor.isServer) {

  Messages.allow({
    insert: function (userId, doc) {
      return true;
    },
    update: function (userId, doc) {
      return true;
    },
    remove: function (userId, doc) {
      return true;
    }
  });

server側で true を返せば実効可能と言う事なんだろう

false を返せば実効できなくなる。

meteor 1.0になったので入門してみたの対処法

client 側から Meteor.call(...)で呼び出し

server側で Meteor.methods(...)を作って処理方法を書くようだ。

insertの処理

server 側

Meteor.methods({

  postInsert: function(postAttributes) {
    check(Meteor.userId(), String);
    check(postAttributes, {
      title: String,
      url: String
    });
    var user = Meteor.user();
    var post = _.extend(postAttributes, {
      userId: user._id,
      author: user.username,
      submitted: new Date()
    });
    var postId = Posts.insert(post);
    return {
      _id: postId
    };
   }
 });

 insertするためにはpostAttributesを継承して要素を追加し、check関数でチェックする。

client側

var post = {
   url: $(e.target).find('[name=url]').val(),
   title: $(e.target).find('[name=title]').val()
};

//post._id = Posts.insert(post);
//Router.go('postPage', post);
Meteor.call('postInsert', post, function(error, result) {
 // display the error to the user and about
 if (error)
   return alert(error.reason);
 Router.go('postPage', {_id: result_id});
});

autopublishパッケージ

私見ではあるが、autopublishは常に変更されたかを見張っていてプログラム中は大変便利だが、完成し実効時は無駄な処理に時間とメモリを割いているから?

削除:

meteor remove autopublish

server側

Meteor.publish('messages', function () {
  return Messages.find({}, {sort: {cdate: -1}});

client側

Meteor.subscribe('messages');