Meteor:如何访问其他用户的详细信息?

时间:2016-02-09 00:24:47

标签: meteor meteor-accounts

Meteor.users.findOne()退回了我的用户文档。

Meteor.users.findOne({_id: 'my ID'})退回了我的用户文档。

Meteor.users.findOne({_id: 'another users's ID'})让我回到了未完成状态。

这明显受到安全限制。但是如何访问其他用户的帐户详细信息,例如_id,姓名,个人资料等?

2 个答案:

答案 0 :(得分:3)

您需要为该用户添加发布商。这是一个例子:

// The user fields we are willing to publish.
const USER_FIELDS = {
  username: 1,
  emails: 1,
};

Meteor.publish('singleUser', function (userId) {
  // Make sure userId is a string.
  check(userId, String);

  // Publish a single user - make sure only allowed fields are sent.
  return Meteor.users.find(userId, { fields: USER_FIELDS });
});

然后在客户端上,你可以subscribe这样:

Metor.subscribe('singleUser', userId);

或使用template subscription这样:

this.subscribe('singleUser', userId);

安全说明:

  1. 始终check您的发布商或客户的论据可能会导致{}传递userId等错误内容。如果您收到错误,请确保meteor add check
  2. 始终对users集合使用fields选项。否则你会发布他们所有的秘密。请参阅common mistakes的“已发布的秘密”部分。

答案 1 :(得分:2)

在服务器上运行它,如下所示:

服务器:

Meteor.publish("otherUsers", function (userID) {
  return Meteor.users.findOne({_id: userID});
});

客户端:

Meteor.subscribe("otherUsers", <userIdYouWantToGetDetailsFor>);

然后您可以在客户端上执行Meteor.users.findOne 请记住,您只能为您的用户和您在流星订阅中传递的用户ID