Meteor.user()仅返回其_id

时间:2013-01-09 18:20:16

标签: meteor

使用Meteor.loginWithPassword()或使用Accounts.createUser(两个客户端)创建新用户后,我可以在回调中确认Meteor.user()确实包含所有设置记录属性。

{ _id: "XXX",
  profile: {
     name: "Joe Shmoe",
     thumbnail: "http://www.YYY.com/ZZZ.jpg"
  },
  username: "joeshmoe" }

此外,根据the official docs

  

默认情况下,当前用户的用户名,电子邮件和个人资料将发布到客户端。

那么,当我尝试在我的模板中访问这些字段时,是否有人能够说出原因

Template.login.user_name = function () {
    return (Meteor.userId() ? Meteor.user().profile.name : '')
};

由于Meteor.user()只返回{_id: "XXX"}而没有实际属性,它失败了吗?即用户肯定已登录,但用户对象突然丢失/隐藏了所有属性。

任何人都知道问题可能是什么?

非常感谢。

编辑: Meteor 0.5.4就是这种情况,这是此时编写的最新版本。接受的答案确实解决了这个问题;有时Meteor.userId()在从服务器到达Object的其余部分之前已经有效。谢谢大家。

3 个答案:

答案 0 :(得分:11)

数据可能尚未从服务器到达。而不只是检查Meteor.userId,如果检查属性会发生什么?

Template.login.user_name = function() {
  return Meteor.userId() && Meteor.user() && Meteor.user().profile ? Meteor.user().profile.name : "";
}

答案 1 :(得分:2)

这也发生在我身上,使用loginWithFacebook。我使用这个函数,到目前为止没有问题:

var reallyLoggedIn = function() {
  var user = Meteor.user();
  if (!user) return false;
  else if (!user.profile) return false;
  else return true;
};

答案 2 :(得分:1)

我无法重现此问题,但如果您拥有UserID,则可以从完整数据库Meteor.users中获取所有信息(即使它应该已经这样做了)。

Template.login.user_name = function() {
    return (Meteor.userId() ? Meteor.users.findOne({_id:Meteor.userId()}).profile.name : '')
}