【发布时间】:2015-09-21 12:07:34
【问题描述】:
我正在使用带有 Iron-router 的 Meteor,如果他没有登录,我会尝试将用户重定向回登录页面。但在某些路由上,不会调用 onBeforeAction。我发现这与路由上的数据函数返回的数据有关。 如果数据返回 null/undefined,则不会调用 onBeforeAction,它会显示没有数据的布局。 如果数据返回,即一个空对象,它正在调用 onBeforeAction 并重定向到登录页面。
1) 这是正确的行为还是我的路由定义有问题?
2) 是否有可能在页面渲染之前调用 onBeforeAction 函数?因为它总是在短时间内显示布局/视图,这不是很好。
所以,我有这条路线:
this.route('dashboardPortfolio', {
path: ['/dashboard/portfolio'],
layoutTemplate: 'dashboardLayout',
yieldTemplates: {
'header': {to: 'header'},
'dashboardHeader': {to: 'dashboardHeader'},
'footerMain' : {to: 'footer'}
},
notFoundTemplate: 'notFound',
loadingTemplate: 'dashboardLoading',
waitOn: function() {
return Meteor.subscribe("portfolio-edit");
},
data: function() {
var portfolio = Portfolio.findOne({user: Meteor.userId()});
if(portfolio) return portfolio;
else return {};
// return Portfolio.findOne({user: Meteor.userId()});
}
});
还有我的 onBeforeAction:
var OnBeforeActions;
OnBeforeActions = {
loginRequired: function(route, asd, pause) {
if (!Meteor.userId()) {
this.layout('login');
this.render('login');
} else {
this.next();
}
}
};
Router.onBeforeAction(OnBeforeActions.loginRequired, {
except: ['register', 'login', 'about', 'portfolio']
});
【问题讨论】:
标签: javascript redirect meteor iron-router