Aurelia子路由器未通过主路由器管道

时间:2019-04-09 13:24:34

标签: aurelia aurelia-router

如果用户未登录,我的应用程序的主路由器管道将重定向到登录页面。

它在大多数页面上都可以正常工作,但是当所述页面自己拥有一个子路由器时,逻辑似乎并没有触及主路由器的管道,从而阻止了重定向(以及不呈现页面)。

主路由器:

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,在第一种情况下确实介入了,在第二种情况下却没有通过

1 个答案:

答案 0 :(得分:1)

最终确定了问题,由于某些原因,看起来LoadRouteStep流水线步骤(在AppRouter内部)试图加载子路由器目标的ViewModel。

由于此ViewModel在构造函数中包含一些代码,因此该代码失败,创建错误并停止管道-永远不会到达重定向。

解决方法是将构造函数代码移至ViewModel的activate函数中。

相关问题