如何让 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
我有两台子路由器,一台用于管理员访问,一台用于 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