Meteor路由器在开发模式下工作,但不在生产模式下
Meteor router working in dev mode but not in production mode
我试图保护一个管理页面,所以我为它创建了一个角色。我使用iron:router作为路由,在生产模式下我遇到了一个问题:每次我在浏览器中键入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]
});
});
我以前遇到过这个问题。问题是Meteor识别您是登录用户的延迟。
在应用程序中导航时,Meteor.user()
保持设置状态,因此您可以到达您的路线。当输入URL时,您会执行一次完整的页面刷新,以便在Meteor完成登录之前调用路由挂钩。
因此,user = Meteor.user();
会将user
设置为null
,您将被重定向到用户页面。
您可以使用Meteor.loggingIn()
来检查登录过程是否仍在进行中。Iron Router的waitOn
钩子可以用于此(或者在大多数情况下,只设置一个定时延迟可能就可以了)。
所以实际上我只是使用了快速渲染,它自动解决了我的问题。希望它能帮助到别人!
相关文章:
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- AngularJS UI路由器不能像ng路由器那样工作
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- AngularJS ui路由器html5模式中断路由
- 如何将参数传递到 UI 路由器状态的模式窗口
- React路由器仅模式路由
- 针对浏览器的不同响应的Backbone.js路由器模式“;背面“;按钮或直接导航
- 显示 ui 路由器模式而不刷新父状态
- 打开singlePost_id页面与流量路由器Meteor处于模式
- Angular HTML5模式和ui路由器返回403
- 主干路由器,视图&模式合作
- 我怎么写一个路由器从URL参数打开Joomla Squeezebox模式
- AngularUI路由器:使用相同url模式的多个状态
- Meteor路由器在开发模式下工作,但不在生产模式下
- 是反应路由器中继与中继模式不一致
- UI 路由器$stateParams具有主细节模式