我一直在尝试将这些自定义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');
}
});
答案 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所说,这是一个安全漏洞,如果它正在生产中,你应该在服务器中创建一个方法并从客户端调用它。