2013-11-26 10 views
8

Tôi là Learnign Meteor và tình cờ gặp phải tình huống này tôi đang theo dõi hướng dẫn Meteor trên tuts plus. mã này hoàn toàn giống nhau trong video, bản cập nhật của bộ sưu tập xảy ra nhưng trong trình duyệt của tôi, nó hiển thị lỗi này:Bộ sưu tập cập nhật Meteor - Lỗi không được phép: Không được phép. Mã không đáng tin cậy chỉ có thể cập nhật tài liệu theo ID. [403]

Lỗi không được phép: Không được phép. Mã không đáng tin cậy chỉ có thể cập nhật tài liệu theo ID. [403]

Mã này là ở đây:

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

Trả lời

16

Đối với mã chạy về phía khách hàng/phía trình duyệt bạn chỉ có thể sử dụng một trường _id như truy vấn. Trên máy chủ, bạn có thể chạy nó như bạn vui lòng.

Sửa đổi mã của bạn để bạn có được tài liệu trước rồi sử dụng _id để thực hiện cập nhật.

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

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

Tôi giả định t.data là một số loại truy vấn? Nếu số _id hãy thử sử dụng {_id: t.data làm truy vấn thay thế. Dù bằng cách nào, miễn là bộ chọn của updatechỉ sử dụng một số _id nó sẽ ổn thôi.

Lý do điều này có thể hoạt động trên hướng dẫn bạn đang theo dõi là thay đổi này đã được giới thiệu gần đây hơn để khóa bảo mật.

+0

Có chính xác cùng một vấn đề và câu trả lời này thực sự đã giúp tôi. –

+0

Dường như vứt bỏ vấn đề nếu bạn có cơ chế lọc _id và MORE. –

+0

@NormanH có điều này sẽ xảy ra, _id chỉ có thể khớp với một tài liệu. Bạn có thể sử dụng bất kỳ truy vấn nào cho 'findOne' đầu tiên – 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); 
     } 
    } 
    }); 
Các vấn đề liên quan