Meteor.userId () возвращает значение авторизованного пользователя, но Meteor.user () не определен в Meteor 1.5.

Вот HTML:

<div>
    <span id="login-entrance">{{loginEntranceContent}}</span>
</div>

Вот код js на стороне клиента:

loginEntranceContent(){
    if (Meteor.userId()==null) {
        return 'Log in/Sign up';
    } else {
            Meteor.user().emails.address;
    };
},

Теперь я уверен, что пользователь вошел в систему, потому что, когда я попробовал Meteor.userId (), он вернул значение _id текущего пользователя. Но Meteor.user () оказывается неопределенным. Я предполагаю, что результат Meteor.user () должен автоматически обновиться позже. поэтому я немного подождал, но он не обновился ни в моем браузере Chrome.

И я знаю, что проблема как-то связана с тем фактом, что DOM отрисовывается до того, как данные готовы. Но я не знаю, что именно там происходит.

Я уже ходил по форуму в поисках ответов, были какие-то похожие темы, но ни одна из них не предоставила четкого объяснения и простого решения для нее. Так что я надеюсь, что стоит открыть для него новую тему.

К вашему сведению, чтобы решить эту проблему, я попытался создать метод на стороне сервера:

Meteor.users.findOne({_id:'this.userId'});

и вызвал его со стороны клиента. он по-прежнему получает неопределенный результат ....


person cxg222    schedule 17.10.2017    source источник
comment
Ваша else-часть ничего не возвращает И Meteor.user().emails.address не существует, потому что электронные письма являются массивом, поэтому единственным способом может быть Meteor.user().emails[0].address. Использование this.userId в кавычках делает его строкой, поэтому он пытается найти пользователя с идентификатором 'this.userId'. Если вы оставите кавычки, он должен найти пользователя с вашим userId. Вы можете узнать больше о синтаксисе и семантике JS, чтобы лучше понять концепции языка.   -  person Jankapunkt    schedule 17.10.2017
comment
Я совершенно забыл, что свойство электронной почты - это массив. мой тупой вопрос. Большое спасибо.   -  person cxg222    schedule 18.10.2017


Ответы (1)


Вы просто делаете null проверку, а как насчет других проверок значения "ложности", вы должны правильно использовать код, как показано ниже,

loginEntranceContent(){
    if (!Meteor.userId()) {
        return 'Log in/Sign up';
    } else if(Meteor.user() && Meteor.user().emails && Meteor.user().emails[0].address){
            return Meteor.user().emails[0].address;
    } else {
        //do something here.
    };
},

и поскольку вы не показали нам код для вызова метода Meteor с клиента, поскольку @Jankapunkt предложил использовать код, как показано ниже, на стороне сервера,

Meteor.users.findOne({_id : this.userId});

Примечание: Meteor предоставляет красивый API для управления учетными записями пользователей < / а>

person Ankur Soni    schedule 17.10.2017