流星路由器在开发模式下工作但不在生产模式下
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
挂钩可用于此目的(或者在大多数情况下仅设置定时延迟可能就可以解决问题)。
所以其实我只是用了fast-render,它自动解决了我的问题。希望它能帮助别人!
我正在尝试保护管理页面,所以我为它创建了一个角色。我在路由中使用 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
挂钩可用于此目的(或者在大多数情况下仅设置定时延迟可能就可以解决问题)。
所以其实我只是用了fast-render,它自动解决了我的问题。希望它能帮助别人!