使用Meteor并尝试重新加载当前页面时遇到问题(我使用Iron Router进行路由)。当我尝试使用以下方式重新加载页面时:
window.location.reload();
// or
window.location = window.location;
重新加载正在发生但很快(仅在生产中,而不是在localhost)用户注销。我认为这是一个错误。有没有办法在没有注销的情况下重新加载页面?
或者,也许,我的控制器中存在路由错误。配置如下:
RouteController.extend({
onBeforeAction: function () {
if(Meteor.user() !== null) {
if(Roles.userIsInRole(Meteor.userId(), 'client'))
this.next();
else
Meteor.logout();
} else
this.redirect('login');
}
})
有没有正确的?也许当浏览器尝试渲染新页面时,由于这里的一些错误,铁路由器会调用Meteor.logout()
。
答案 0 :(得分:0)
嗯,你自己就把他记录下来了; - )
这常常似乎是数据同步延迟的另一个实例。我敢打赌,问题是Roles
下面的数据在第一次执行以下代码时尚未同步:
if(Roles.userIsInRole(Meteor.userId(), 'client'))
this.next();
else
Meteor.logout();
因此,您正在自己记录用户。数据将在不久之后到达客户端,同一个块可能会再次被动执行,但为时已晚。
在执行此块之前,您需要找到一种等待Roles
基础数据准备就绪的方法。由于您使用的是铁路由器,因此您只需在路由中添加适当的waitOn
订阅(如果您在全局使用路由控制器,则可以添加路由控制器)。哪个集合要等待,我不知道,因为我不知道Roles
背后是什么(它不是铁路由器的特征)。