用户是流星中的特殊对象;您不想在用户中添加字段,而是在用户个人资料中添加字段。
来自文档:
By default the server publishes username, emails, and profile.
如果您想在创建帐户时添加姓氏等属性,则应在 Account.onCreateUser 服务器端挂钩中使用:http://docs.meteor.com/#accounts_oncreateuser
Accounts.onCreateUser(function(options, user) {
//pass the surname in the options
user.profile['surname'] = options.surname
return user
}
如果你想在之后更新用户,你可以从客户端这样做:
Meteor.users.update({_id:Meteor.user()._id}, { $set: {what you want to update} });
默认情况下,用户群将允许这样做(当前用户可能会自行更新)。如果您不信任您的用户并希望确保一切都正确更新,您还可以禁止来自客户端的任何更新并通过Meteor.call() 进行更新,然后继续检查服务器端。但这将是可悲的。
编辑:
正如 cmets 中所说,无法通过标准 account-ui 添加选项。您只能在注册后更新用户。要在订阅时添加选项,您必须创建自己的表单。
我不会通过编写 html 标记来侮辱您,但这是您希望在提交事件之后(以及在各种检查之后):
var options = {
username: $('input#username')[0].value,
emails: [{
address: $('input#email')[0].value,
verified: false
}],
password: $('input#password')[0].value,
profile: {
surname: $('input#surname')
},
};
Accounts.createUser( options , function(err){
if( err ) $('div#errors').html( err.message );
});
您只需要基于帐户的软件包;不是帐户用户界面。
使用社交网络登录是小菜一碟:
Meteor.loginWithFacebook({
requestPermissions: ['email', 'user_birthday', 'user_location']
}, function(error){loginCallBack(error);});
关于 ram1 的回答:
这不是流星的工作方式。您不会“发布”表单。您希望通过 websocket 完成所有客户端/服务器通信。您所说的等价物是从客户端创建服务器方法的“Meteor.call('myserverfunction', myarguments, mycallback)”,然后传递您希望服务器使用的参数。
但这不是你能充分利用流星的方式。有你想使用的哲学:
- 您的本地 mini mongo 中有您从服务器获取的数据
- 您在本地更新基础/视图中的这些数据
- meteor 施展魔法将这些更新传输到服务器
- 服务器可以回答:好的,更新已保存,这对您来说是无缝的。或者回答:不!撤消更改(您可以实施错误通知系统)
(它可以回答否,因为您没有更新此字段的权限,因为此更新违反了您设置的规则...)
您所做的只是在数据库服务器端设置权限和控制。这样,当一个诚实的客户进行更新时,他会立即看到结果;在它被推送到服务器并发送到其他客户端之前。这就是 延迟补偿,流星的七大原则之一。
如果你通过 Meteor.call 修改数据,你会这样做:
- 向服务器发送更新
- 服务器检查并更新基础
- 服务器将更新发送给客户端(包括您)
- 你的本地基础更新和你的视图更新 => 你看到你的更新
=> 这是你昨天应用程序中的内容;流星允许您构建今天的应用程序。不要使用旧的食谱:)