Meteor:尝试向用户添加自定义字段()但它没有成功

时间:2016-03-01 11:47:49

标签: meteor

我一直在尝试将这些自定义fiels添加到配置文件下的流星用户帐户系统中,但它并没有成功。我有一个模态表单,弹出来执行此操作,下面是我在事件上的代码。

Template.profile.events({
'submit #saveBasicProfile': function(event, template) {
    console.log("CLICK");
    event.preventDefault();
    var fullnameVar = event.target.fullname.value;
    var titleVar = event.target.title.value;
    var about_youVar = event.target.about_you.value;
    Meteor.users.update( {_id:Meteor.user()._id}, 
            { $set: 
                [{ "profile.fullname"  : fullnameVar }, 
                 { "profile.title"     : titleVar },
                 { "profile.about_you" : about_youVar } ]
            });

    //Router.go('/profile');
}   

});

3 个答案:

答案 0 :(得分:1)

在方法中进行更新:

Template.profile.events({
    'submit #saveBasicProfile': function(event, template) {
       event.preventDefault();
       Meteor.call('update_profile',
           event.target.fullname.value,
           event.target.title.value,
           event.target.about_you.value,
           function(err) {
               if (err) alert(err);
               else Router.go('/profile');
           }
       );
    })
});

if (Meteor.isServer) {
    Meteor.methods({
        update_profile: function(fullname, title, about_you) {
            check(fullname, String);
            check(title, String);
            check(about_you, String);

            // ... further validation

            Meteor.users.update(Meteor.userId(), { $set: {
                'profile.fullname': fullname,
                'profile.title': title,
                'profile.about_you': about_you   
            }});
        })
    });
}

答案 1 :(得分:0)

很可能你得到了#34;访问被拒绝"因为客户端不允许编辑用户集合。您可以添加允许规则以进行更新,但由于可能存在安全漏洞,因此不建议使用该规则。

您可以在模板中调用服务器方法并在服务器上处理更新操作。

答案 2 :(得分:-1)

您尝试更新的个人资料可能与请求的个人资料相同。因此,您可以为用户模型设置允许规则,使所有用户都可以编辑配置文件字段。

类似的东西:

Users.allow({
// clients can modify the profile field of their own document, and
// nothing else.
update: function (userId, user, fields, modifier) {
    // make sure it is our record
    if (user._id == userId)
        return true;
    else
        if(fields[0] === 'profile')
            return true;

    return false;
}
);

但是,正如Areca所说,这是一个安全漏洞,如果它正在生产中,你应该在服务器中创建一个方法并从客户端调用它。