在浏览器控制台上禁用Meteor.user()详细信息

时间:2017-05-22 14:39:37

标签: meteor

有没有办法在生产模式下禁用浏览器控制台中的Meteor.user()内的详细信息?

下面是我在生产中部署代码时看到的快照。就客户细节而言,这是非常不安全的。

Below is the image

3 个答案:

答案 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')
})
相关问题