如何让 Aurelia 子路由器拥有自己的授权步骤

How to have Aurelia child routers with their own authorize step

我有两台子路由器,一台用于管理员访问,一台用于 public 访问 public 访问路由添加了 AuthorizeStep 并检查用户是否已登录。

管理员访问使用不同的身份验证,因此要检查管理员用户是否已通过身份验证,我需要进行不同的检查。

我的 app.ts 与 "parent" 路线:

 configureRouter(config, router) {
    config.title = 'My site';
    config.addPipelineStep('authorize', AuthorizeStep);
    config.map([
      { route: '', redirect: 'Public' },
      { route: 'Public', moduleId: 'public/views/home', name:'public', title: 'Public Portal - Home' },
      { route: 'Admin', moduleId: 'admin/home', name:'admin', title: 'Admin - Home' }
    ]);

    this.router = router;
  }
}

public 子路由器类似于:

configureRouter(config, router) {
    config.map([
        { route: '', moduleId: './home', name: 'home', title: 'Home', auth: true },
        { route: 'login', moduleId: './login', name: 'login', title: 'Login' },
        { route: 'page2/:id', moduleId: './page2', name: 'page2', title: 'Page 2', auth: true }
    ]);

    this.router = router;
 }

主页和第 2 页路由经过身份验证的位置。

admin 子路由器类似于:

configureRouter(config, router) {
        config.map([
            { route: 'page1', moduleId: './page1/home', name: 'page1', title: 'page 1', auth: true },
            { route: 'page2', moduleId: './page2/home', name: 'page2', title: 'page 2', auth: true }
        ]);

        this.router = router;
  }

只有经过身份验证的路由。 我希望能够做类似的事情:

configureRouter(config, router) {
        config.addPipelineStep('authorize', AdminAuthorizeStep);
        config.map([
            { route: 'page1', moduleId: './page1/home', name: 'page1', title: 'page 1', auth: true },
            { route: 'page2', moduleId: './page2/home', name: 'page2', title: 'page 2', auth: true }
        ]);

        this.router = router;
  }

addPipelineStep 出现在子路由器而不是父路由器上,但​​这不起作用,或者我无法让它工作,这甚至可能吗?还是我只能有一个 AuthorizeStep 并在其中处理逻辑以确定它是管理员还是 public 用户访问路由?

这对于子路由器来说似乎是不可能的。在 aurelia-router.js:

if (pipelineSteps.length) {
  if (!router.isRoot) {
    throw new Error('Pipeline steps can only be added to the root router');
  }
...

而且我确实在我的控制台中收到错误消息: ERROR [app-router] Error: Pipeline steps can only be added to the root router