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 を返せば実効できなくなる。
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');