2017-05-25 7 views
0

Ich habe ein wenig Schwierigkeiten, die E-Mail des aktuellen Benutzers in Meteor zu bekommen.Aktueller Benutzer email erhalten meteor

publish.js

Meteor.publish('allUsers', function(){ 
if(Roles.userIsInRole(this.userId, 'admin')) { 
return Meteor.users.find({}); 
    } 
}); 

Meteor.publish('myMail', function(){ { 
    return Meteor.user().emails[0].address; 
    } 
}); 

profile.html

<template name="Profile"> 
    <h1> My Profile </h1> 
    {{#if currentUser}} 
<p>{{currentUser.profile.firstName}}</p> <p>{{currentUser.roles}}</p> 
<p>{{currentUser.userEmail}}</p> 
{{/if}} 
</template> 

profile.js

Template.Profile.helpers({ 
    users: function() { 
     return Meteor.users.find(); 
    }, 
    userEmail: function() { 
     return Meteor.user().emails[0].address; 
     } 
}); 

Vorname und ._id Display gut, E-Mailadresse funktioniert leider nicht. Hat jemand einen Tipp? Vielen Dank!

Antwort

1

Ihre Veröffentlichung 'myMail ist sowohl redundant als auch inkorrekt. Sie sollten entweder einen Cursor (oder ein Array von Cursorn) zurückgeben oder einen Cursor beobachten und den Veröffentlichungslebenszyklus selbst behandeln (eine ziemlich fortgeschrittene Funktion, die für Ihre Frage irrelevant ist). Sie verwenden es a-la Meteor.methods, und Sie sollten Benutzer Meteor.user() in einer Publikation sowieso nicht wirklich verwenden.

Es ist redundant, weil das Account-Paket von Meteor das Feld emails des aktuellen Benutzers automatisch veröffentlicht.

In Ihrer Vorlage behandeln Sie userEmail als Attribut des aktuellen Benutzers, anstatt es als Helfer zu bezeichnen.

Ich würde Ihnen raten, eine Wache zu verwenden und stellen Sie sicher, dass der Benutzer tatsächlich eine E-Mail-Adresse, der etwas in den Zeilen hat:

JS:

Template.Profile.helpers({ 
    users: function() { 
    return Meteor.users.find(); 
    }, 
    userEmail: function(user) { 
    if (user.emails && user.emails.length > 0) { 
     return user.emails[0].address; 
    } 
    return 'no email'; 
    } 
}); 

HTML:

<template name="Profile"> 
    <h1> My Profile </h1> 
    {{#if currentUser}} 
    <p>{{currentUser.profile.firstName}}</p> <p>{{currentUser.roles}}</p> 
    <p>{{userEmail currentUser}}</p> 
    {{/if}} 
</template> 

Ich würde auch dringend davon abraten, alle Felder in der 'allUsers' Publikation zu veröffentlichen, da dies sensible Daten preisgibt, die den Server nicht unter fast jeder Umgebung verlassen sollten Ereignisse (z. B. Passwortdaten).

Verwandte Themen