Получить текущую электронную почту пользователя

У меня возникли некоторые трудности с получением электронной почты текущего пользователя в Meteor.

опубликовать.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; 
    }
});

профиль.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> 

профиль.js

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

Имя и ._id отображаются нормально, адрес электронной почты, к сожалению, нет. У кого-нибудь есть совет? Спасибо!


person JeePee    schedule 25.05.2017    source источник


Ответы (1)


Ваша 'myMail публикация избыточна и неверна. Вы должны либо вернуть курсор (или массив курсоров), либо наблюдать за курсором и самостоятельно отправить дескриптор жизненного цикла публикации (довольно продвинутая функция, не имеющая отношения к вашему вопросу). Вы используете его а-ля Meteor.methods, и вам в любом случае не следует использовать Meteor.user() в публикации.

Это избыточно, потому что пакет учетных записей Meteor автоматически публикует поле emails текущего пользователя.

В вашем шаблоне вы рассматриваете userEmail как атрибут текущего пользователя, вместо того, чтобы вызывать его как помощника.

Я бы посоветовал использовать охрану и убедиться, что у пользователя действительно есть адрес электронной почты, что-то вроде строк:

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>

Я также настоятельно рекомендую не публиковать все поля в публикации 'allUsers', так как это приведет к раскрытию конфиденциальных данных, которые не должны покидать сервер практически ни при каких обстоятельствах (например, данные пароля).

person MasterAM    schedule 25.05.2017