添加额外的用户字段

时间:2014-06-02 18:18:29

标签: meteor

在我的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);
  }
});

1 个答案:

答案 0 :(得分:0)

是的,我相信应该做的工作,虽然我实际上没有运行代码。这个想法当然是正确的。

需要注意的主要事项是:

  1. 允许在服务器上使用适当的Meteor.users.allow()块从客户端编辑用户文档的必要性,假设您要删除“不安全”包(在执行任何操作之前需要删除它)生产)。
  2. 事实"by default the server publishes username, emails, and profile",所以你需要在服务器上编写一个Meteor.publish函数并订阅它,如果你想在用户文档中将任何其他字段公开给客户端已经删除了“autopublish”包(再次,你真的应该)。