我正在使用路由器代码
测试限制登录功能var requireLogin = function() {
if (! Meteor.user()) {
console.log("user not logged");
this.next()
} else {
console.log("user logged");
this.next()
}
}
Router.onBeforeAction(requireLogin, {except: ['home','login','about']});
当我尝试进入userprofile
等限制区域时,它要求我登录并打印"user not logged"
在我成功登录并尝试再次访问该区域之后。它打印的代码都以"user not logged"
开头,然后是"user logged"
我想知道如何避免这种情况发生?因为有些页面在发生这种情况时会发生故障。
如果我进入限制区域页面,我希望它只打印"user logged"
。
任何帮助都将不胜感激。
答案 0 :(得分:2)
您需要在Meteor.loggingIn()
函数中的某处集成requireLogin
。因为,正在发生的事情是Meteor仍在加载用户系统,并且对于每次路由更改,它会根据当前会话(如果存在)重新验证用户。
var requireLogin = function() {
if(!Meteor.user()){
if(Meteor.loggingIn()){
this.render(this.loadingTemplate);
}else{
this.render('accessDenied');
}
}else {
this.next();
}
}
您会注意到它使用了this.loadingTemplate
。要保持这一点,您还必须配置路由以具有加载模板。 e.g:
Router.configure({
loadingTemplate: 'loading'
});
或者你可以简单地将其与this.render('loading');
交换出来,其中'loading'
是您的'现在加载'的模板名称。产量/页。