在我的Meteor应用程序中,我使用默认的accounts
包,它提供了默认的登录和注册功能。现在我想为用户添加一个额外的字段,比如说nickname
,并为登录用户编辑这些信息。
为了编辑个人资料,我想我应该做这样的事情:
Template.profileEdit.events({
'submit form': function(e) {
e.preventDefault();
if(!Meteor.user())
throw new Meteor.Error(401, "You need to login first");
var currentUserId = this._id;
var user = {
"profile.nickname": $(e.target).find('[name=nickname]').val()
};
Meteor.users.update(currentUserId, {
$set: user
}, function(error){
if(error){
alert(error.reason);
} else {
Router.go('myProfile', {_id: currentUserId});
}
});
}
});
但是如果我查看Mongo,我就不会存储信息。同样在显示配置文件时,{{profile.nickname}}
将返回空。这有什么不对?
修改:添加collections\users.js
以显示权限:
Meteor.users.allow({
update: function (userId, doc) {
if (userId && doc._id === userId) {
return true;
}
}
});
Meteor.users.deny({
update: function(userId, user, fieldNames) {
return (_.without(fieldNames, 'profile.nickname').length > 0);
}
});
答案 0 :(得分:0)
是的,我相信应该做的工作,虽然我实际上没有运行代码。这个想法当然是正确的。
需要注意的主要事项是:
Meteor.users.allow()
块从客户端编辑用户文档的必要性,假设您要删除“不安全”包(在执行任何操作之前需要删除它)生产)。Meteor.publish
函数并订阅它,如果你想在用户文档中将任何其他字段公开给客户端已经删除了“autopublish”包(再次,你真的应该)。