Лучше обрабатывать logged_in и logged_out, не показывая неправильную раскладку в iron-router

Я пытаюсь получить чистое перенаправление на форму входа в систему, если пользователь не вошел в систему. Это в основном работает, но я часто вижу свой основной макет, который должны видеть только зарегистрированные пользователи. Я вижу его только секунду, прежде чем появляется экран входа в систему, но я пытаюсь избавиться от этой коротко "мерцающей" неисправной страницы.

Мой router.js выглядит примерно так:

Router.configure({
  layoutTemplate: 'layoutPrimary',
  loadingTemplate: 'loading',
  waitOn: function() {
    if (Meteor.user()) {
      return Meteor.subscribe('messages');
    }
    else {
      return;
    }
  }
});

Router.route('/', {name: 'dashboard'});
Router.route('/login', {name: 'login'});

еще несколько маршрутов без чего-либо особенного (некоторые подписки). Теперь мы проверяем, вошел ли пользователь в систему. Если нет, ему будет доставлен специальный макет, содержащий только функции входа / регистрации.

// require login on all routes
Router.onBeforeAction(function () {
  if(!Meteor.user() && !Meteor.loggingIn()){
    this.layout('layoutSlim');
    this.render('login');
  } else {
    this.next();
  }
});

затем мы обрабатываем 404 и выполняем некоторые функции для проверки пользователя, которые используются в маршрутах выше.

// 404 Handling
Router.route('/(.*)',function(){
  this.render('error404');
});

// Be sure the Meteor.user() exists when settings are loaded
var userIsLoaded = {
  ready: function() { return !!Meteor.user(); }
};

var userLoggedIn = function() {
  if (!Meteor.user() && !Meteor.loggingIn()) {
    this.stop();
    Router.go('login');
    return false;
  }
  else {
    return true;
  }
};

Любая идея, что я могу сделать, чтобы в скором времени не показывать неправильный макет? Я также иногда вижу экран входа в систему при входе в систему - это довольно редко, но было бы лучше, если бы этого не произошло вообще.

Я не уверен на 100%, если это связано с Iron-Router или, возможно, проблема, которая может быть решена пробелами / Blaze?

Спасибо за помощь, Фрэнк

1 ответ

Это происходит потому, что subscribe('messages') сделано, но коллекция пользователей Метеор нет.

Вы можете использовать currentUser помощник из Accounts Package

{{if currentUser}}
     <!-- show information here -->
  {{else}}
     <!-- Forbiden template or login template -->
{{/if}}
Другие вопросы по тегам