В RouterGuard не указан правильный маршрут в RouterStateSnapshot

У меня есть Guard на моих маршрутах для предотвращения несанкционированного доступа. Охранник проверяет сеанс и вызывает службу входа в систему, если он недействителен. У меня настроены маршруты следующим образом...

const routes: Routes = [
    { path: 'logon', loadChildren: './logon/logon.module#LogonModule' },
    { path: '', redirectTo: 'home', pathMatch: 'full' },
    { path: 'home', loadChildren: './home/home.module#HomeModule', canActivate: [HomeGuard] },
    { path: 'forms', loadChildren: './forms/forms.module#FormsModule', canActivate: [FormsGuard] },
    { path: 'processes', component: ProcessesComponent, canActivate: [ProcessGuard] },
    { path: '**', redirectTo: 'home' }
];

Фрагмент кода от Guard...

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

      // This always reports home !
      alert('Logon Guard - State = ' + state.url);

      if (this.logonService.IsLoggedOn()) {
        return true;
      } 
      else {
        // Tell the clientApp what url was in use when calling the canActivate.
        this.logonService.RedirectUrl = state.url;

        this.router.navigate(['logon']);
        return false;
      }
  }

Я хотел перенаправить на первоначально запрошенный маршрут после входа в систему и попытался использовать URL-адрес RouterStateSnapshot для получения запрошенного маршрута. Однако он ВСЕГДА удерживает маршрут, указанный по умолчанию.

{путь: '', redirectTo: 'домой', pathMatch: 'полный' },

Поэтому, если я перейду к маршруту «процесс», т. е. «http://localhost:4200/process, canActivate в Guard всегда будет содержать «домашний» маршрут в свойстве URL-адреса RouterStateSnapshot.

Я видел следующий аналогичный запрос... возвращает правильный URL

Я пытался предложить указать другого охранника для каждого маршрута (от отчаяния), но это не работает. Это точно не ответ? Должен ли я иметь возможность использовать аутентификацию Guard среди маршрутов?

Я использую Ангуляр 4.


person Derek Brennan    schedule 31.05.2017    source источник