Dopo l'accesso di un utente con Meteor.loginWithPassword()
o la creazione di uno nuovo con Accounts.createUser
(sia lato client), posso confermare nei loro callback che Meteor.user()
contiene infatti tutte le proprietà del record set.Meteor.user() restituisce solo il suo _id
{ _id: "XXX",
profile: {
name: "Joe Shmoe",
thumbnail: "http://www.YYY.com/ZZZ.jpg"
},
username: "joeshmoe" }
Inoltre, secondo the official docs,
Per impostazione predefinita, nome utente, e-mail dell'utente corrente e profilo sono pubblicati al cliente.
Così, qualcuno dovrebbe essere in grado di dire perché quando provo ad accedere a questi campi nel mio Modelli questa convenzione
Template.login.user_name = function() {
return (Meteor.userId() ? Meteor.user().profile.name : '')
};
viene a mancare a causa di Meteor.user()
solo tornare {_id: "XXX"}
con nessuna delle sue proprietà effettive? Cioè l'utente è sicuramente loggato, ma l'oggetto utente ha perso improvvisamente/sta nascondendo tutte le sue proprietà.
Qualcuno sa quale potrebbe essere il problema?
Molte grazie.
MODIFICA:questo accade con Meteor 0.5.4, l'ultima versione in questo momento di scrittura. La risposta accettata risolve davvero il problema; talvolta Meteor.userId()
è già valido prima che il resto dell'oggetto sia arrivato dal server. Grazie a tutti.
Ho anche provato a pubblicarli sul server e ad annullarli automaticamente sul client, ma nessuna modifica. Non avrei bisogno di farlo comunque. '// Server Meteor.publish (" userData ", function() { return Meteor.users.find ({_ id: this.userId}, {fields: {profile: 1, username: 1}}); }); ... // client Meteor.autosubscribe (function() { Meteor.subscribe ("userData"); }); ' – cneuro
Poi ho messo il tutto in una chiamata di metodo getter in Meteor.methods, sospettando il contesto Modelli per disabilitare determinati accessor di database per sicurezza, ma è esattamente lo stesso problema. '// Client Meteor.methods ({ userName: function() { return Meteor.user(). Profile.name; }); ... Template.login.user_name = function() { return (Meteor.userId()? Meteor.call ("userName"): '') }; ' – cneuro
Quale versione di Meteor? –