Я пытаюсь направить пользователя к различным компонентам после входа в систему на основе ролей.
Но когда я направляю, я получаю бесконечное l oop в 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'}},
];
Redirect-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, поскольку он никогда не достигает этого кода.
- оповещение («перейти к правильному определению на основе роли»); отображается бесконечно.
- route: ActivatedRouteSnapshot всегда пусто: (url: '')