Meteor userId存在但用户未定义

时间:2016-11-07 14:57:52

标签: javascript node.js meteor meteor-accounts

在渲染我的反应组件时,我得到Meteor.user() null。然后我尝试访问Meteor.userId()并将其更正为登录用户的ID。还尝试通过Meteor.users.findOne()访问用户但未成功。

我的问题是,虽然用户ID可以访问,但为什么用户对象未定义?

我使用以下代码段进行测试:

var uid = Meteor.userId();
console.log(uid);                                 // printed the _id correctly

var usr = Meteor.user();                
console.log(usr);                                 // undefined 

var usr1 = Meteor.users.findOne({_id: uid});
console.log(usr1);                                // undefined 

2 个答案:

答案 0 :(得分:3)

Meteor.userId()可在登录时立即使用。 Meteor.user()要求通过DDP将对象传递给客户端,以便它不会立即可用。

默认情况下,profile键已发布。由于您已关闭自动发布,因此您可能希望从用户发布您自己的特定密钥集。

我通常有:

服务器:

Meteor.publish('me',function(){
  if ( this.userId ) return Meteor.users.find(this.userId,{ fields: { key1: 1, key2: 1 ...}});
  this.ready();
});

客户端:

Meteor.subscribe('me');

您还可以发布有关其他用户的信息,但是要共享的密钥列表通常要小得多。例如,您通常不希望与登录用户共享其他用户的电子邮件地址。

答案 1 :(得分:2)

Meteor.user()确实无法直接使用,您可以尝试以下方法:

Tracker.autorun(function(){
  var uid = Meteor.userId();
  console.log(uid);                                 // printed the _id       correctly

  var usr = Meteor.user();                
  console.log(usr);                                 // undefined 

  var usr1 = Meteor.users.findOne({_id: uid});
  console.log(usr1);  
});

这应首先打印undefined,然后打印正确的用户。