Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Meteor中更新客户端用户帐户时拒绝访问[403]_Javascript_Meteor_Meteor Accounts - Fatal编程技术网

Javascript 在Meteor中更新客户端用户帐户时拒绝访问[403]

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和useraccounts包的文档,但找不到答案。我已经成功地添加了useraccounts包,并创建了几个用户,但现在我想为给定用户向集合中的记录添加一些数据

例如,在帐户创建和登录之后。我希望用户能够在他们的记录中添加/编辑一些字段(短传记等),但每当执行
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
字段创建和更新任何数据。阅读更多。好的,重读一遍,现在有一个更好的理解。谢谢