Ngrx два охранника для маршрута при выходе из системы второй не срабатывает - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть следующие маршруты:

{
    path: 'admin',
    canLoad: [AuthGuard, AccountGuard],
    loadChildren: () =>
      import('./features/admin/admin.module').then(m => m.AdminModule),
    data: { preload: false }
  },
  {
    path: 'auth',
    loadChildren: () =>
      import('./features/auth/auth.module').then(m => m.AuthModule),
    data: { preload: false }
  }

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

onSameUrlNavigation: 'reload'

runGuardsAndResolvers: 'always'

, но у меня все еще такое же поведение.

Любые идеи?

NB Я также пытался положитьпростой файл console.log в AccountGuard, например

canLoad(): Observable<boolean> {console.log('Account)}

, но при втором входе в систему я не вижу никаких сообщений в инструментах разработки

1 Ответ

1 голос
/ 06 ноября 2019

Согласно определению на угловом веб-сайте - «CanLoad - это интерфейс, который класс может реализовать, чтобы быть защитником, решающим, могут ли быть загружены дети».

Когда загружен маршрут / дочерний объект, охрана CanLoad возвращает значение true, и после загрузки защита не будет вызываться снова. Роль CanActivate заключается в том, чтобы выполнять подобные проверки каждый раз, когда вы переходите к маршруту. Я бы предложил реализовать CanActivate и назначить охрану, которую необходимо запустить при входе в систему.

Также здесь есть ссылка на github, где эта функция была реализована угловой командой - https://github.com/angular/angular/commit/8785b2bf6db8c3ecc4bd5edcf667d5f2f53f5271

...