【问题标题】:Meteor Update collection - Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403]流星更新集合 - 未捕获的错误:不允许。不受信任的代码只能按 ID 更新文档。 [403]
【发布时间】:2013-12-11 16:19:59
【问题描述】:

我是 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);
  }
}
});

【问题讨论】:

    标签: javascript collections meteor


    【解决方案1】:

    对于在客户端/浏览器端运行的代码,您只能使用_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 only 的选择器使用_id 就可以了。

    这可能适用于您正在遵循的教程的原因是最近引入了此更改以锁定安全性。

    【讨论】:

    • 遇到了完全相同的问题,这个答案对我很有帮助。
    • 如果您有 _id 以及更多过滤机制,似乎会引发问题。
    • @NormanH 是的,就是这样,_id 只能匹配一个文档。您可以对第一个 findOne 使用任何查询
    【解决方案2】:
      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);
          }
        }
      });
    

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多