2013-09-26 135 views
9

Tôi đã tạo biểu mẫu để người dùng cập nhật tiểu sử của họ. Khi tôi gửi biểu mẫu, tôi nhận được lỗi [403].Cập nhật Meteor.users

Not permitted. Untrusted code may only update documents by ID.

Câu hỏi của tôi là, nếu tôi sẽ sử dụng Meteor.users.allow, nơi - trong những tập tin/thư mục - Tôi viết mã này?

Cảm ơn, Nathan

+0

bạn có thể đăng mã của mình không ?? Nó sẽ giúp chúng ta hiểu rõ hơn. –

Trả lời

17

Các lỗi mà bạn đang nhận được không phải là một kết quả của phép/từ chối quy tắc của bạn. Bạn sẽ nhận được một lỗi 'Truy cập từ chối' ngay nếu nó được.

Khi cập nhật người dùng của bạn (cũng như có đúng các quy tắc allow), bạn cần cập nhật người dùng của mình theo số _id - đặc biệt nếu chúng được cập nhật ở cuối ứng dụng khách.

Vì vậy, thay vì

Meteor.users.update({name: "etc"}, {$set:..}); 

Bạn cần phải chia nó ra làm đôi, một để có được những _id và sau đó một để cập nhật tài liệu của bạn về điều đó.

var user = Meteor.users.findOne({name: 'etc'}); 

Meteor.users.update({_id: user._id}, {$set:..}); 

Quy tắc là trên máy khách, bạn chỉ có thể sử dụng _id để tìm tài liệu khi cập nhật.

+0

Cảm ơn @Akshat. Tôi đọc lỗi, nhưng tôi đã cứng đầu, nghĩ rằng có một cách xung quanh nó. Một câu hỏi nữa, nơi nào sẽ là một nơi tốt để đặt các quy tắc 'allow' của tôi cho bộ sưu tập' người dùng'? – Nathan

+0

Bạn cần đảm bảo rằng chúng chạy trên máy chủ, do đó, trong tệp js trong thư mục gốc hoặc thư mục '/ server'. – Akshat

+10

bạn không cần 'Meteor.users.findOne();' gọi ở đây. 'Meteor.users.update ({_id: Meteor.userId()}, {$ set: {'profile.online': true}});' là đủ để bạn có thể gọi 'Meteor.userId()' ngay lập tức. – Tom