Javascript 在Meteor中更新客户端用户帐户时拒绝访问[403]
我正在阅读Meteor和useraccounts包的文档,但找不到答案。我已经成功地添加了useraccounts包,并创建了几个用户,但现在我想为给定用户向集合中的记录添加一些数据 例如,在帐户创建和登录之后。我希望用户能够在他们的记录中添加/编辑一些字段(短传记等),但每当执行Javascript 在Meteor中更新客户端用户帐户时拒绝访问[403],javascript,meteor,meteor-accounts,Javascript,Meteor,Meteor Accounts,我正在阅读Meteor和useraccounts包的文档,但找不到答案。我已经成功地添加了useraccounts包,并创建了几个用户,但现在我想为给定用户向集合中的记录添加一些数据 例如,在帐户创建和登录之后。我希望用户能够在他们的记录中添加/编辑一些字段(短传记等),但每当执行Meteor.users.update(…)时,我总是会收到403错误 可以找到我的登录配置文件 导致错误的代码: Template.editProfile.events({ 'submit form': fu
Meteor.users.update(…)
时,我总是会收到403错误
可以找到我的登录配置文件
导致错误的代码:
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:“流星。错误”
消息:“访问被拒绝[403]”
原因:“访问被拒绝”
通过删除不安全的包,默认情况下客户端写访问将被拒绝。 如果希望允许客户端直接写入集合,则需要定义规则 例如:
Meteor.users.allow({
update: ownsDocument
});
ownsDocument = function (userId, doc) {
return doc && doc.userId === userId;
};
ownsDocument()
函数检查指定的userId
是否拥有文档。除了update
回调之外,您还可以设置insert
和remove
的规则
了解更多信息,访问或 我认为您需要对用户mongo collection执行collection.allow({update:blahblah})。文档在这里:@matthias eckhart,我看到这个问题被编辑了一点,但是我想指出,我特别问这个问题,关于在使用这个包时,它没有提到在客户端的任何地方设置allow()(我想可能有一些可选配置我误解了),事情是,我还没有删除不安全的包。我认为这是useraccounts包的特定内容,或者可能是默认的meteor“user”集合。此外,我也尝试过上面的方法,但它不起作用,尽管我同意在允许/拒绝规则期间必须有一些东西阻止这一点(可能是用户集合的一些钩子设置?),不幸的是,我无法重现您的问题。我创建了一个微型应用程序,演示如何更改用户名。请查看我的更新答案。感谢您的帮助:)您的代码和我的代码之间的区别是这一行-
$set:{'profile.name':username}
。因此,profile
字段看起来可以编辑,但我们不能直接动态添加到用户obj?示例-$set:{'myField':'xxx'}
是否在某个地方记录了这一点(可能我遗漏了它),这是正确的。如果要向用户文档中添加字段,应使用Account.onCreateUser
服务器端钩子。但是,用户可以使用profile
字段创建和更新任何数据。阅读更多。好的,重读一遍,现在有一个更好的理解。谢谢