答案 0 :(得分:1)
只是不要将敏感数据发布到客户端,保留关于服务器上用户成员身份的逻辑。
答案 1 :(得分:0)
请勿在{{1}}中保存敏感数据。
而是创建另一个集合,然后通过 _id 关联它。
谨慎使用发布和订阅。
答案 2 :(得分:0)
您不希望在profile
文档上使用Meteor.users
字段,因为该字段始终发布到客户端。
见这里:https://guide.meteor.com/accounts.html#dont-use-profile
我建议将所有敏感数据从profile
字段移至users
文档的顶级键。
if (Meteor.isServer) {
// with document:
// Document {
// _id: '123',
// services: { /* */ },
// profile: { /* */ },
// subscription: { /* */ }
// }
Meteor.publish('users.subscriptions', function(userId) {
return Users.find({ _id: userId }, { fields: { subscription: 1 }})
})
}
if (Meteor.isClient) {
Template.home.onCreated(function() {
this.autorun(() => {
console.log(Meteor.user().subscription) // `undefined` at this point
this.subscribe('users.subscriptions', Meteor.userId(), function() {
console.log(Meteor.user().subscription) // returns user's subscription
})
})
})
}
您可以使用percolate:migrations
之类的库将数据迁移到顶级密钥。
meteor add percolate:migrations
然后:
// server/migrations/1-move-all-profile-info-to-top-level.js
import _ from 'meteor/underscore'
Migrations.add({
version: 1,
up: function() {
_.each(Meteor.users.find().fetch(), function(user) {
Meteor.update(user._id, {
$set: {
subscription: user.profile.subscription,
// other fields that needs migrating
profile: null // empty out the profile field
}
})
})
}
})
Meteor.startup(() => {
Migrations.migrateTo('latest')
})