流媒体路由器在开发模式下工作但不在生产模式

时间:2015-06-30 13:16:55

标签: javascript meteor iron-router

我正在尝试保护管理页面,所以我为它创建了一个角色。我正在使用iron:路由器用于路由,在生产模式下我有一个问题:每次我在浏览器中输入url / admin时,我最终都在/ user(这是登录页面)。我在开发模式下没有这个问题!我真的不明白为什么

以下是代码:

var middleware;

middleware = {
  isAdmin: function() {
    var user;
    user = Meteor.user();

    if (!Roles.userIsInRole(user, ['admin'])) {
      this.redirect('user');
      return;
    }

    return this.next();
  }
};

对于路由器:(在

Router.map(function() {
  this.route('user', {
    path: '/user'
  });
  return this.route('admin', {
    path: '/admin',
    before: [middleware.isAdmin]
  });
});

2 个答案:

答案 0 :(得分:1)

我以前遇到过这个问题。问题是Meteor延迟识别您是登录用户。

在应用内导航时,Meteor.user()仍然设置,因此您可以到达路线。在URL中输入时,执行整页刷新,以便在Meteor完成登录之前调用路径挂钩。

因此,user = Meteor.user();会将user设置为null,您将被重定向到用户页面。

您可以使用Meteor.loggingIn()检查登录过程是否仍在进行中。 Iron Router的waitOn挂钩可用于此(或者在大多数情况下设置定时延迟可能会起作用)。

答案 1 :(得分:0)

所以实际上我只使用了快速渲染,它可以自动解决我的问题。希望它能帮助别人!