Angular 8 - бесконечно l oop в canActivate, поскольку маршрут всегда пуст - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь направить пользователя к различным компонентам после входа в систему на основе ролей.

Но когда я направляю, я получаю бесконечное 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: '')

1 Ответ

0 голосов
/ 05 апреля 2020

Оказалось, что роль, которую я получил от localStorage.getItem ("role"), была с заглавной первой буквой, а роль данных маршрутизации была в нижнем регистре, поэтому в итоге не нашла url и работала бесконечно. Это все еще плохое поведение, так как маршрут ** должен был это схватить. Но я могу двигаться дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...