canActivate ложный случай перемещается несколько раз в Chrome / Safari - PullRequest
0 голосов
/ 22 февраля 2019

У нас есть надстройка Angular 5.5 Outlook (использует office.js) со следующими маршрутами:

const routes: Routes = [
  { path: 'about', component: AboutComponent, canActivate: [AuthGuardService] },
  { path: 'accounts', component: AccountsComponent, canActivate: [AuthGuardService] },
  { path: 'editInvite/:type', component: EditInviteComponent, canActivate: [AuthGuardService] },
  { path: 'login/:reason', component: LoginComponent },
  { path: 'meetings/start', component: MeetingsComponent, canActivate: [AuthGuardService] },
  { path: 'offline', component: OfflineComponent },
  { path: 'redirect/:id/noag', component: RedirectComponent },
  { path: 'redirect/:id', component: RedirectComponent, canActivate: [AuthGuardService] },
  { path: 'settings', component: SettingsComponent, canActivate: [AuthGuardService] }
];

Наш canActivate выглядит следующим образом:

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    let hasAccount: boolean = this.credentialService.hasAccount();

    let hasData: boolean = this.clientDataService.hasData();

    if (hasAccount && hasData) {          
      return true;
    } else {
      let redirect: string = "";
      if (hasAccount) { //attempt auto-login
        redirect = "/redirect/login/noag";
      } else {
        redirect = "/login/firstLogin";
      }
      this.sharedDataService.returnToUrl = state.url;
      this.router.navigate([redirect]);

      return false;
    }
  }

В Chrome иВ Safari переход к «/ redirect / login / noag» (noag означает отсутствие аутентификации) приводит к многократному срабатыванию ngOnInit объекта RedirectComponent.Обратите внимание, что hasAccount () и hasData () являются простыми проверками и не являются асинхронными.Кроме того, код отлично работает в IE.

У кого-нибудь есть догадки о том, что может происходить, или тесты, которые я могу попытаться помочь мне разобраться?

Спасибо!

РЕДАКТИРОВАТЬ:

Изменение вызова навигации на:

this.router.navigate([redirect], { skipLocationChange: true });

приводит к тому, что ngOnInit () вызывается только один раз, но вызывает интерфейс пользователя для RedirectComponent (сообщение о ходе выполнения и счетчик)), чтобы быть пустым.

Может ли это быть связано с этой старой надстройкой Word Online проблема , но в этом случае происходит для надстройки Outlook?У меня появилась идея попробовать skipLocationChange в одном из комментариев к этому сообщению.

...