我正在阅读Meteor here和useraccounts包here的文档,但无法找到答案。我已经成功添加了useraccounts包并创建了一些用户,但现在我想将一些数据添加到给定用户的集合中的记录中。
例如,在帐户创建和登录后。我希望用户能够在他们的记录上添加/编辑一些字段(简短的传记等),但是每当执行Meteor.users.update(..)
时我都会收到403错误。
我的登录配置文件可以找到here。
导致错误的代码:
Template.editProfile.events({
'submit form': function(e) {
e.preventDefault();
var profileInfo = {
displayName: $(e.target).find('[name=displayName]').val(),
tagLine: $(e.target).find('[name=tagLine]').val(),
aboutMe: $(e.target).find('[name=aboutMe]').val()
};
Meteor.users.update(
{ _id: Meteor.userId()},
{ $set: profileInfo},
function (err) {
if(err) {
console.log('there was an error submitting editProfile data');
console.log(err);
} else {
Router.go('profile');
}
}
);
}
});
执行控制台日志会显示Meteor.userId()
正确返回,所以我不确定问题是什么。我认为这是允许/拒绝的问题,但我甚至不知道从哪里开始进行故障排除。
确切的错误是:
错误:403
errorType:“Meteor.Error”
消息:“拒绝访问[403]”
原因:“拒绝访问”
答案 0 :(得分:4)
通过删除insecure
包,默认情况下将拒绝客户端写访问。
如果要允许客户端直接写入集合,则需要定义规则。
例如:
Meteor.users.allow({
update: ownsDocument
});
ownsDocument = function (userId, doc) {
return doc && doc.userId === userId;
};
ownsDocument()
函数检查指定的userId
是否拥有该文档。除update
回调外,您还可以为insert
和remove
设置规则。
详细了解Meteor's collection.allow(options),访问demo app或clone the repository。