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

时间:2015-07-25 22:39:35

标签: javascript meteor meteor-accounts

我正在阅读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]”

     

原因:“拒绝访问”

1 个答案:

答案 0 :(得分:4)

通过删除insecure包,默认情况下将拒绝客户端写访问。 如果要允许客户端直接写入集合,则需要定义规则。

例如:

Meteor.users.allow({
    update: ownsDocument
});

ownsDocument = function (userId, doc) {
    return doc && doc.userId === userId;
};

ownsDocument()函数检查指定的userId是否拥有该文档。除update回调外,您还可以为insertremove设置规则。

详细了解Meteor's collection.allow(options),访问demo appclone the repository