【发布时间】:2020-07-16 23:05:56
【问题描述】:
我试图在登录后根据角色将用户路由到不同的组件。
但是当我路由时,我在 canActivate 中得到一个无限循环,因为路由 url 始终为空,这应该只在第一次为真,第二次应该是路径“/admin”或“/user”。
App-routing.module.ts
const routes : Routes = [
{ path : '' , redirectTo : '', pathMatch: 'full' , canActivate : [RedirectGuardService] },
{ path : 'admin' , component : DashboardComponent , canActivate : [AuthGuardService], data : { role : 'admin'}},
{ path : 'user' , component : UserComponent , canActivate : [AuthGuardService], data : { role : 'user'}},
];
重定向-guard.service.ts
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<boolean> | Promise<boolean> | boolean {
const role = localStorage.getItem("role");
if (role) {
alert("navigate to the right detination based on role");
this.router.navigate(['/'+ role]);
return true;
}
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
return false;
}
- 我没有包含 AuthGuardService 的代码,因为它永远不会命中该代码。
- alert("根据角色导航到正确的目的地");无限显示。
- 路由:ActivatedRouteSnapshot 始终为空:(url:'')
【问题讨论】:
-
配置中的第一个路由,
''重定向到''。也许这导致了无限循环? -
有可能,我测试一下。
-
一个小建议似乎很奇怪,您要根据从本地存储中读取的内容来决定角色和位置或导航。您确实知道任何人都可以随时编辑它并将其角色更改为管理员,对吗?只是提醒一下安全问题:)
-
是的,我知道,他们可以改变他们的角色,但他们只能查看图形部分,因为我已经保护了后端,所以他们无论如何都无法获取任何数据。根据我的阅读,这应该是处理角色的首选方式。
标签: angular