canLoad не предотвращает загрузку компонентов - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть приложение Angular с маршрутами, которые реализуют canLoad: [AuthGuard], и canLoad в моем классе AuthGuard примерно так:

    canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
    boolean 
   {
     if (this.authService.isLogged || this.authService.checkLoggedIn()) 
     {
      return true;
     } else
     {
        this.router.navigate(['/login']);
        return 
     } 
   }

Если я пытаюсь получить доступ к любому из моих маршрутов, пока я не вошел в систему, япостоянно получаю ошибки, потому что компоненты маршрута по-прежнему работают NgOnInit() без какой-либо информации о маршрутизации, поэтому я в конечном итоге выполняю вызовы API без аргументов.Страница, однако, всегда переходит на /login.

Я не совсем понимаю, как работает AuthGuard, но я установил точки останова на функции canLoad(), и они никогда не запускаются.Я что-то здесь не так делаю?

Вот корневой маршрут, о котором идет речь:

{
    path: '',
    component: MydocsComponent,
    canLoad: [AuthGuard],
    children: [...]
}

РЕДАКТИРОВАТЬ: я понял, что это проблема с моим this.authService.checkLoggedIn() методом, а именно, что он будет перенаправлять пользователей на /login дочтобы быть проверенным AuthGuard, так что это проблема с моей стороны.Спасибо за помощь, и я надеюсь, что ответ ниже поможет некоторым людям, использующим canLoad.

1 Ответ

1 голос
/ 17 апреля 2019

canLoad используется с модулями lazily-loaded для предотвращения загрузки чанка в случае сбоя условия.Если вы хотите ограничить доступ к компоненту, используйте canActivate guard.

Проверьте это summary

...