我是Learnign Meteor并遇到了这种情况,我正在关注tuts plus的Meteor教程。视频中的代码与收集更新完全相同,但在我的浏览器中显示此错误:
未捕获错误:不允许。不受信任的代码只能按ID更新文档。 [403]
代码在这里:
Template.person.events({
'click': function (e, t) {
Session.set("edit-"+ t.data._id, true);
},
'keypress input': function(e,t){
if(e.keyCode === 13){
var docid = Session.get("edit-"+ this._id);
People.update(t.data, {$set: {name: e.currentTarget.value}});
Session.set("edit-"+ t.data._id, false);
}
}
});
答案 0 :(得分:16)
对于在客户端/浏览器端运行的代码,您只能使用_id
字段作为查询。在服务器上,您可以随意运行它。
修改代码,以便先获取文档,然后使用其_id
执行更新。
var person = People.findOne(t.data);
People.update({_id: person._id}, {$set: {name: e.currentTarget.value}});
我认为t.data
是某种查询?如果是_id
尝试使用{_id: t.data
作为查询。无论哪种方式,只要update
的选择器使用_id
,它就应该没问题。
这可能对您所关注的教程起作用的原因是最近引入了此更改以锁定安全性。
答案 1 :(得分:0)
Template.person.events({
'click': function (e, t) {
Session.set('edit-' + t.data._id, true);
},
'keypress input' : function(e, t) {
if (e.keyCode == 13) {
People.update(t.data._id, { $set: { name: e.currentTarget.value }});
Session.set('edit-' + t.data._id, false);
}
}
});