使用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的其余部分之前已经有效。谢谢大家。
答案 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 : '')
}