【问题标题】:publishing user relevant data发布用户相关数据
【发布时间】:2014-11-25 21:05:30
【问题描述】:

我创建了一个简单、简约的diary app

在客户端,我使用

Meteor.subscribe('entries', Meteor.userId());

订阅用户创建的条目(存储在 mongodb 集合中)。我将用户 ID 传递给发布功能(在服务器上):

Meteor.publish('entries', function(userID) { 
    return Entries.find({userId: userID});
});

登录后,Meteor.userId() 不再是虚假的,因为它是一个反应式数据源。不过,相关数据并未公布。我通过自动运行订阅功能解决了这个问题:

Tracker.autorun(function() {
    Meteor.subscribe('entries', Meteor.userId());
});

它有效,但我觉得这是一个糟糕的解决方案。

那么问题来了: 一般而言,应该如何发布与用户相关的数据?必须有更好的方法来做到这一点,而不是将用户 ID 传递给发布函数。还有,是不是很不安全?

顺便说一下,很想听听有关该应用的反馈

【问题讨论】:

  • 在您的发布功能中,您可以访问this.userId 以安全地检索调用用户的 ID。 - 编辑:我觉得这应该是你问题的答案!要我这样发布吗?
  • 哦。我不知道我可以通过“this”访问当前用户。谢谢!

标签: mongodb meteor


【解决方案1】:

您无需从订阅中传递 userId。在publish 函数中,您可以使用this.userId 来获取当前用户。如果用户未登录,您也可以只返回一个空数组。

Meteor.publish("entries", function () {
  if (!this.userId) return [];
  return Entries.find({ userId: this.userId });
});

【讨论】:

  • 谢谢!所以一般来说,我们在发布函数里面使用服务器上的this.userId来获取用户相关数据?
  • 是的,您不想从订阅(或方法调用)中获取它,因为用户可以发送任何 id。
猜你喜欢
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多