Nach dem Anmelden eines Benutzers mit Meteor.loginWithPassword()
oder Erstellen eines neuen mit Accounts.createUser
(beide clientseitig) kann ich in ihren Rückrufen bestätigen, dass Meteor.user()
tatsächlich alle Eigenschaften des Datensatzes enthält.Meteor.user() gibt nur seine _id
{ _id: "XXX",
profile: {
name: "Joe Shmoe",
thumbnail: "http://www.YYY.com/ZZZ.jpg"
},
username: "joeshmoe" }
Weiterhin nach the official docs,
standardmäßig den Benutzernamen des aktuellen Benutzers, E-Mails und das Profil an den Client veröffentlicht.
So würde jemand in der Lage sein, warum zu sagen, wenn ich versuche, diese Felder in meinen Vorlagen zugreifen thusly
Template.login.user_name = function() {
return (Meteor.userId() ? Meteor.user().profile.name : '')
};
es scheitert aufgrund Meteor.user()
nur {_id: "XXX"}
mit keinem ihrer tatsächlichen Eigenschaften der Rückkehr? I.e. Der Benutzer ist definitiv angemeldet, aber das Benutzerobjekt hat plötzlich alle Eigenschaften verloren.
Wer weiß, was das Problem sein könnte?
Vielen Dank.
EDIT:Dies passiert mit Meteor 0.5.4, die neueste Version zu dieser Zeit des Schreibens. Die akzeptierte Antwort behebt tatsächlich das Problem; manchmal ist Meteor.userId()
bereits gültig, bevor der Rest des Objekts vom Server angekommen ist. Danke an alle.
Ich habe sogar versucht, sie auf dem Server zu veröffentlichen und sie auf dem Client abzumelden, aber keine Änderung. Ich sollte das allerdings nicht tun müssen. '// Server Meteor.publish (" userData ", function() { Zurückgeben Meteor.users.find ({_id: this.userId}, {fields: {profile: 1, username: 1}}); }); ... // Client Meteor.autosubscribe (function() { Meteor.subscribe ("userdata"); }); ' – cneuro
Dann legte ich das den ganzen Anruf in eine Getter-Methode in Meteor.methods ahnend Der Templates-Kontext, der bestimmte DB-Accessoren für die Sicherheit verbietet, aber es ist genau das gleiche Problem. '// Client Meteor.methods ({ userName: function() { Rückgabe Meteor.user(). Profilname; }); ... Template.login.user_name = Funktion() { Rückkehr (Meteor.userId()? Meteor.call ("userName"): '') }; ' – cneuro
Welche Version von Meteor? –