use*_*575 34 user-accounts meteor
我正在使用mrt add accounts-ui-bootstrap-dropdown并mrt add accounts-password在我的应用程序上运行一个简单的登录页面.
帐户用户给了我一个很好的哈希,包含id,createdAt,电子邮件等.
如果我想在此哈希中添加其他字段,以便稍后可以使用它们,我该怎么做?例如,我想要输入他们的名字和姓氏:
"given_name":"John","姓":"Doe"
fab*_*ien 40
用户是流星中的特殊对象; 您不希望在用户中添加字段,而是在用户配置文件中添加字段.
来自doc:
By default the server publishes username, emails, and profile.
Run Code Online (Sandbox Code Playgroud)
如果要在创建帐户时添加surname等属性,则应在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
}
Run Code Online (Sandbox Code Playgroud)
如果您想在之后更新用户,可以通过以下方式从客户端进行更新:
Meteor.users.update({_id:Meteor.user()._id}, { $set: {what you want to update} });
Run Code Online (Sandbox Code Playgroud)
默认情况下,用户群将允许(当前用户可以自行更新).如果您不信任您的用户并希望确保所有内容都正确更新,您也可以禁止客户端的任何更新,并通过a Meteor.call()进行更新,然后继续进行检查服务器端.但这会很难过.
编辑:
如评论中所述,通过标准帐户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 );
});
Run Code Online (Sandbox Code Playgroud)
您只需要基于帐户的包; 不是帐户 - ui.
登录社交网络是蛋糕:
Meteor.loginWithFacebook({
requestPermissions: ['email', 'user_birthday', 'user_location']
}, function(error){loginCallBack(error);});
Run Code Online (Sandbox Code Playgroud)
关于ram1的答案:
这不是流星的工作方式.您没有"发布"表单.您希望通过websocket完成所有客户端/服务器通信.你所说的相当于从客户端制作一个服务器方法的"Meteor.call('myserverfunction',myarguments,mycallback)",并传递你希望服务器使用的参数.
但这并不是你获得最好的流星的方式.您希望与之合作的理念是:
(它可以回答否,因为您没有更新此字段的权限,因为此更新违反了您设置的规则...)
您所要做的就是在数据库服务器端设置权限和控制.这样,当一个诚实的客户进行更新时,他会立即看到结果; 在将其推送到服务器并发送给其他客户端之前的方式.这是延迟补偿,是流星的七大原则之一.
如果您通过Meteor.call修改数据,您将这样做:
=>这就是你昨天的应用程序; meteor允许你构建一个今天的应用程序.不要应用旧食谱:)
小智 13
接受的答案如何正确,但WHERE是过时的信息.(是的,作为对答案的评论会更好,但我还不能这样做.)
将自定义数据存储到Meteor.users集合的最佳方法是在用户文档上添加一个新的唯一命名的顶级字段.
关于使用Meteor.user.profile存储自定义信息:
不要使用个人资料
当一个新用户注册时,默认情况下会添加一个名为profile的诱人现有字段.此字段历来用作用户特定数据的暂存区 - 可能是其图像头像,名称,介绍文本等.因此,每个用户的配置文件字段可由该用户从客户端自动写入.它也会自动发布给该特定用户的客户端.
基本上,在配置文件字段中存储名称,地址,dob等基本信息可能很好,但不能存储超出该信息的任何内容,因为默认情况下,它可以由客户端写入并且容易受到恶意用户的攻击.
小智 11
我有同样的问题,并设法只做Accounts.createUser:
Accounts.createUser({
email: email,
password: password,
profile: {
givenName: 'John',
surname: 'Doe',
gender: 'M'
}
}
Run Code Online (Sandbox Code Playgroud)
这是非常简单的方式,它的工作原理.只需在配置文件部分添加所需的变量即可.希望它可以帮助某人.
| 归档时间: |
|
| 查看次数: |
27925 次 |
| 最近记录: |