用户在重新加载页面后退出

时间:2016-01-26 16:22:13

标签: meteor iron-router

使用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()

1 个答案:

答案 0 :(得分:0)

嗯,你自己就把他记录下来了; - )

这常常似乎是数据同步延迟的另一个实例。我敢打赌,问题是Roles下面的数据在第一次执行以下代码时尚未同步:

if(Roles.userIsInRole(Meteor.userId(), 'client'))
    this.next();
else
    Meteor.logout();

因此,您正在自己记录用户。数据将在不久之后到达客户端,同一个块可能会再次被动执行,但为时已晚。

在执行此块之前,您需要找到一种等待Roles基础数据准备就绪的方法。由于您使用的是铁路由器,因此您只需在路由中添加适当的waitOn订阅(如果您在全局使用路由控制器,则可以添加路由控制器)。哪个集合要等待,我不知道,因为我不知道Roles背后是什么(它不是铁路由器的特征)。