2016-01-26 2 views
0

У меня проблема при использовании Meteor и попытка перезагрузки текущей страницы (я использую Iron Router для маршрутизации). Когда я пытаюсь перезагрузить страницу с помощью:Пользователь получает выход из системы после перезагрузки страницы

window.location.reload(); 
// or 
window.location = window.location; 

Перезагрузка происходит, но вскоре после того, как (только в производстве, а не на локальном хосте) пользователь получает выход из системы. Я думаю, что это ошибка. Есть ли способ перезагрузить страницу без выхода из системы?

Или, может быть, в моих контроллерах есть ошибка в маршрутизации. Они сконфигурированы следующим образом:

RouteController.extend({ 
    onBeforeAction: function() { 
     if(Meteor.user() !== null) { 
      if(Roles.userIsInRole(Meteor.userId(), 'client')) 
       this.next(); 
      else 
       Meteor.logout(); 
     } else 
      this.redirect('login'); 
    } 
}) 

Правильны ли они? Возможно, когда браузер попытается отобразить новую страницу, утюг-маршрутизатор вызывает Meteor.logout() из-за некоторой ошибки здесь.

ответ

0

Ну, вы регистрируете его сами ;-)

В этом, как это часто бывает, кажется, еще один экземпляр задержки синхронизации данных. Держу пари, что проблема в том, что данные, лежащие в основе Roles еще не синхронизироваться в первый раз, когда следующий код запускается на выполнение:

if(Roles.userIsInRole(Meteor.userId(), 'client')) 
    this.next(); 
else 
    Meteor.logout(); 

Таким образом, вы регистрируете пользователя из себя. Данные вскоре появятся на клиенте, и тот же блок, скорее всего, повторит операцию снова, но это слишком поздно.

Вам нужно будет найти способ подождать, пока данные, лежащие в основе Roles, будут готовы перед выполнением этого блока. Поскольку вы используете железный маршрутизатор, вы можете просто добавить соответствующую подписку на маршрут (или контроллер маршрута, если вы используете его на глобальном уровне) waitOn. Какую коллекцию ждать, я не знаю, так как я не знаю, что стоит за Roles (это не особенность железного маршрутизатора).

+0

Прошло некоторое время с тех пор, как я использовал Iron Router, но если я правильно помню использование Meteor.loggingIn(), это поможет. –

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