我是meteor的新手,我读了很多但是我对meteor.users集合以及使用它的最佳方式感到困惑。我对最佳实践指南的解释是meteor.users集合只应用于管理accounts.ui包;电子邮件,密码和用户名。该指南指出,轮廓是不安全的,是原始流星设计中的一个缺陷,不应使用。
所以我的问题是,如果我想创建一个包含名字,姓氏,年龄,地址,头像等内容的用户个人资料,我是否要创建一个单独的集合,如'userProfile'并使用meteor.userid链接它或者我想以某种方式将它保存在meteor.users集合中
答案 0 :(得分:1)
通常的做法是将用户个人资料信息(例如您描述的类型)放入Meteor.user().profile
。事实上,人们通常会做更多事情,例如群组成员,postIds数组,各种事物。保持单独的1:1个人资料集合是一个选项,但没有根本原因这样做,我能想到。相反,它使事情变得更复杂。
更新:正如@jonatan在评论中指出的那样,Meteor指南现在在用户文档中unrecommended the use of the profile field。
相反,他们建议将自定义用户信息存储为用户文档中的顶级键。这不仅更安全,而且性能更高,因为增量更新可以通过DDP在顶级密钥上发布,但可以在子密钥上发布。
即使在删除 autopublish 包之后, Meteor.user().profile
始终会为当前用户自动发布。除非您明确设置出版物,否则根本不会发布有关其他用户的信息。在这种情况下,必须注意只发布那些应该对其他用户可见的字段。例如,您可能只想发布其他用户的username
而不是他们的电子邮件地址以获取隐私。你可以这样做:
Meteor.publish('otherUsers',function(){
return Meteor.users.find({},{ fields: { 'profile.username': 1 }});
});
您还可以限制基于它们以某种方式连接到当前用户的其他用户集,以避免始终发布所有用户。
您还应该避免发布包含用户安全信息的services
密钥(例如:密码的密码)。正如@David Weldon在评论中指出的那样,你不应该在配置文件中添加其他安全信息和你可能想要修改他们自己的配置文件的拒绝规则来自客户。