2016-04-18 4 views
1

Независимо от того, вошел ли пользователь в систему или нет, когда я звоню Meteor.user() в Meteor.startup(), пользователь всегда undefined (не зарегистрирован).Метеор: проверьте, что пользователь вошел в систему при запуске

Я хочу выполнить действие (перенаправить пользователя на внешний url, где должен произойти вход), если он не вошел в систему, как только страница загружается. Проблема в том, что если он войдет в систему, страница будет знать его только в определенный момент времени (в миллисекундах, конечно). Я могу подстерегать возможный вошедшего пользователя с Tracker.autorun, но я хочу, чтобы выполнить действие Теперь (когда пользователь всегда не вошли в систему), и я знаю только после нужно ли мне выполнять его или нет (может быть, пользователь уже вошел в систему).

Как это сделать в Метеор?

EDIT

Я закончил с следующей работы:

Tracker.autorun(() => { 
    if (!Meteor.user() && !Meteor.loggingIn() && Accounts.loginServicesConfigured()) { 
     Meteor.loginWithTwitter(); 
    } 
}); 
+1

Вы можете попробовать «Meteor.loggingIn()', docs: http://docs.meteor.com/#/full/meteor_loggingin – Sasikanth

+1

, по вашему мнению, мой комментарий должен быть опубликован как ответ, поэтому мы можем закрыть вопрос или вы хотите ждать лучшего ответа? – Sasikanth

+0

Я буду принимать его как ответ! – pistacchio

ответ

2

Попробуйте Meteor.loggingIn()

Из документов

if a login method (such as Meteor.loginWithPassword, Meteor.loginWithFacebook, or Accounts.createUser) is currently in progress. A reactive data source.

1

Одним из решений проблемы является использование the meteorhacks:fast-render package. Его включение приводит к отправке начального набора данных вместе с кодом приложения, поэтому информация пользователя доступна сразу в методе startup.

Если вы не хотите использовать этот пакет, вы всегда можете изменить структуру своего приложения, чтобы «сейчас», о котором вы говорите, всегда происходит после загрузки исходных данных. Например, вы можете перенести эту проверку на обратный вызов onBeforeAction вашего корневого контроллера. Это всегда будет выполняться до отображения любого шаблона, предполагая, что вы также подписываетесь на пользовательские данные в корневом контроллере.

Смежные вопросы