Лучше обрабатывать 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}}