Я борюсь с общей необходимостью перенаправлять пользователя на страницу входа в систему, если он не вошел в систему (Meteor v0.8.0 в Windows 7).
Есть несколько похожих вопросов о stackoverflow, но ответ не работает для меня.
Не будет работать # 1: render()
Из документация:
onBeforeAction: function () {
if (!Meteor.user()) {
// render the login template but keep the url in the browser the same
this.render('login');
// stop the rest of the before hooks and the action function
this.stop();
}
},
Два вопроса здесь:
1- Документация устарела. Функция this.stop()
больше отсутствует. Как указано здесь, код должен быть:
onBeforeAction: function (pause) {
if (!Meteor.user()) {
// render the login template but keep the url in the browser the same
this.render('login');
// stop the rest of the before hooks and the action function
pause();
}
},
2- Это работает, только если маршрут не имеет значения layoutTemplate
. Если он имеет один, шаблон login
отображается в {{>yield}}
layoutTemplate
. Обычно это не то, что вы хотите для страницы входа.
Не будет работать # 2: Router.go() или this.redirect()
Определение маршрута для страницы входа звучит как естественный путь. Затем вы можете:
Router.onBeforeAction(function(pause) {
if (!Meteor.user()) {
pause();
Router.go('\login');
}
}, {except: ['login']});
Или:
Router.onBeforeAction(function() {
if (!Meteor.user())
this.redirect('\login');
}, {except: ['login']});
Но, как ни странно, по-прежнему существует проблема, если исходный маршрут (перед перенаправлением) имеет layoutTemplate
: шаблон /login
отображается внутри {{yield}}
. Что опять же не то, что вы обычно хотите (и определенно не то, что вы ожидаете, так как шаблон /login
не имеет layoutTemplate
).
Я нашел способ частично решить эту проблему:
Router.onBeforeAction(function() {
if (!Meteor.user()) {
var that = this;
setTimeout(function() { that.redirect('\login'); }, 0);
}
}, {except: ['login']});
Теперь все в порядке: шаблон /login
отображается как чистая страница... За исключением того, что layoutTemplate
исходного маршрута кратковременно мигает до отображения шаблона /login
.
У вас есть эта же проблема?