如果用户未登录,我的应用程序的主路由器管道将重定向到登录页面。
它在大多数页面上都可以正常工作,但是当所述页面自己拥有一个子路由器时,逻辑似乎并没有触及主路由器的管道,从而阻止了重定向(以及不呈现页面)。
主路由器:
configureRouter (rc: RouterConfiguration, router: Router) {
this.router = router;
rc.addAuthorizeStep(this.requireAuth);
const auth = { authenticated: true, needsCurrentOrg: true };
const loginRoute = {
route: 'login/:token?',
name: 'login',
moduleId: PLATFORM.moduleName('views/login/login'),
};
rc.map([
{
route: [ROOT_PAGE, DASHBOARD_PAGE],
name: DASHBOARD_PAGE,
moduleId: PLATFORM.moduleName('views/dashboard/dashboard'),
settings: auth
},
{
route: CREDENTIALS_PAGE,
name: CREDENTIALS_PAGE,
moduleId: PLATFORM.moduleName('views/credentials/credentials-root'),
settings: auth
})]
}
凭证路由器:
configureRouter (rc: RouterConfiguration) {
rc.map([
{
route: '',
name: 'credentials-list',
moduleId: PLATFORM.moduleName('./credentials-grid'),
}
]);
}
因此,如果我没有登录就打/#/dashboard
,我将被重定向到/login
,但是如果打/#/credentials
则没有任何反应:空白页,无重定向。我在debugger
中间件代码中放入了requireAuth
,在第一种情况下确实介入了,在第二种情况下却没有通过
答案 0 :(得分:1)
最终确定了问题,由于某些原因,看起来LoadRouteStep
流水线步骤(在AppRouter
内部)试图加载子路由器目标的ViewModel。
由于此ViewModel在构造函数中包含一些代码,因此该代码失败,创建错误并停止管道-永远不会到达重定向。
解决方法是将构造函数代码移至ViewModel的activate
函数中。