Meteor:在用户创建时将会话变量值插入字段

时间:2014-12-03 12:55:44

标签: meteor iron-router meteor-accounts

这是我之前发送的Retrieve value from html 'value' attribute问题的分支。我现在正在尝试将会话变量值插入名为' userType'的字段中。在用户创建时。我保留了不安全的包,所以我可以立即执行Meteor.users.find()。count();在控制台中。到目前为止,用户尚未创建。

我是否以正确的方式插入会话变量值,是否应将此会话值插入服务器端并使用Accounts.onCreateUser?

客户js

Template.joinForm.events({
'submit .form-join': function(e, t) {
    e.preventDefault();
    var firstName = t.find('#firstName').value,
    lastName = t.find('#email').value,
    email = t.find('#email').value,
    password = t.find('#password').value,
    username = firstName + '.' + lastName,
    profile = {
            name: firstName + ' ' + lastName,
            userType: selectedUserType
};

    Accounts.createUser({
        email: email,
        username: username,
        password: password,
        profile: profile
    }, function(error) {
        if (error) {
            alert(error);
        } else {
            Router.go('/');
        }
    });
}
});

我已经制作了' userType'会话变量全局,请看如下......

Template.authJoinType.events({
'click div.join-type-inner': function(e, tmpl) {
    userType = $(e.target).attr("value");
    Session.set('userType', userType);
    selectedUserType = Session.get('userType');
    console.log(selectedUserType);
}
});

1 个答案:

答案 0 :(得分:1)

createUser获取的选项对象最多包含四个字段:usernameemailpasswordprofile。您正在传递被忽略的第五个字段。为了将userType数据传输到服务器,您需要在调用profile时将其添加到createUser对象。


如果用户文档的根目录(而非个人资料)中存在userType很重要,您可以在onCreateUser回调中修改它,如下所示:

客户端

profile = {
  name: firstName + ' ' + lastName,
  userType: userType
};

服务器

Accounts.onCreateUser(function(options, user) {
  if (options.profile) {
    if (options.profile.userType) {
      user.userType = options.profile.userType;
      delete options.profile.userType;
    }
    user.profile = options.profile;
  }

  return user;
});

Meteor.publish(null, function() {
  // automatically publish the userType for the connected user
  // no subscription is necessary
  return Meteor.users.find(this.userId, {fields: {userType: 1}});
});