2013-11-26 1 views
8

Ich bin Learnign Meteor und bin über diese Situation gestolpert, die ich entlang eines Meteor Tutorials auf Tuts Plus verfolgt habe. der Code ist genau der gleiche in Video das Update der Sammlung, aber in meinem Browser zeigt es diesen Fehler:Meteor Update-Sammlung - Uncaught Error: Nicht erlaubt. Nicht vertrauenswürdiger Code kann Dokumente nur nach ID aktualisieren. [403]

Uncaught Fehler: nicht erlaubt. Nicht vertrauenswürdiger Code kann Dokumente nur nach ID aktualisieren. [403]

Der Code ist hier:

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

Antwort

16

Für Code, den Sie nur ein _id Feld als die Abfrage verwenden kann, auf der Client-Seite/Browser-Seite ausgeführt wird. Auf dem Server können Sie es nach Belieben ausführen.

Ändern Sie Ihren Code, damit Sie das Dokument zuerst erhalten, und verwenden Sie dann _id, um ein Update durchzuführen.

var person = People.findOne(t.data); 

People.update({_id: person._id}, {$set: {name: e.currentTarget.value}}); 

Ich nehme an, t.data ist eine Art von Abfrage? Wenn es ein _id ist, versuchen Sie stattdessen {_id: t.data als Abfrage verwenden. So oder so, solange der Selektor der updatenur eine _id verwendet, sollte es in Ordnung sein.

Der Grund, warum dies bei dem Lernprogramm, dem Sie folgen, funktioniert, ist diese Änderung, die in jüngerer Zeit eingeführt wurde, um die Sicherheit zu sperren.

+0

Hatte genau das gleiche Problem und diese Antwort hat mir wirklich geholfen. –

+0

Scheint das Problem zu verursachen, wenn Sie die _id und auch MEHR Filtermechanismen haben. –

+0

@NormanH Ja, das wäre der Fall, die _id kann nur einem Dokument entsprechen. Sie können jede Abfrage für das erste 'findOne' verwenden – Akshat

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); 
     } 
    } 
    }); 
Verwandte Themen