这是我之前发送的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);
}
});
答案 0 :(得分:1)
createUser获取的选项对象最多包含四个字段:username
,email
,password
和profile
。您正在传递被忽略的第五个字段。为了将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}});
});