Перезапись маршрутизации Angular 8 не удалась - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть приложение, которое использует MSAL.js для аутентификации Azure B2C. Таким образом, он следует обычному неявному потоку OAuth 2.0 для аутентификации пользователя - когда пользователь нажимает кнопку «Вход», он перенаправляется на «авторизацию» конечной точки, а затем пользователь перенаправляется обратно в приложение после успешного входа в систему.

Ивот в чем проблема - ответ на запрос выглядит следующим образом:

https://localhost:4200/run#state=dc81c410-4cbd-4218-bc78-9c5b5e9bebe5&client_info={...}

Чтобы это работало, мне нужно переписать этот URLв run/state, поэтому итоговый URL будет:

https://localhost:4200/run/state=f5f2c20f-ed72-4631-b834-80bf60aa6cd7&client_info={...}

И это делается в AppComponent.ngInit:

    this.router.events.subscribe(event => {
      if (event instanceof NavigationStart) {
        if (!!event.url && event.url.match(/^\/run#state/)) {
          const newUrl = event.url.replace("run#state", "run/state");
          console.warn(`newUrl = ${newUrl}`);
          this.router.navigate([newUrl]);
        }
      }
    });

Теперь я вижу переписывание в логах.

Но проблема в том, что он теперь перенаправляет в root. Из журнала:

  • NavigationStart для run/state
  • URL REWRITE (но на этот раз уже ничего не перезаписывается, сейчас run/state сейчас)
  • "Angular работает в режиме разработки. Вызовите enableProdMode () для включения производственного режима. "
  • " Обработка обратного вызова из ответа на перенаправление "- MSAL.js callback function
  • " CHECK USER "- from CanLoad охранник (который сейчас просто возвращает true)
  • RouteConfigLoadStart
  • Перешел к https://localhost:4200/ BOOM !!!

Почему на Земле он перенаправляет на root?

Одна важная вещь - если я перейду к:

https://localhost:4200/run/state=04e49903-1510-47da-9b24-cee988229d16&client_info={...}

в браузере, он открывает этот маршрут (без перенаправлений!).

Репо на github .

консоль: enter image description here

1 Ответ

0 голосов
/ 06 ноября 2019
  • Если вам нужно направить (переписать) маршрут / состояние, попробуйте это,

    this.router.events.subscribe(event => { if (event instanceof NavigationStart) { if (!!event.url && event.url.match(/^\/run#state/)) { this.router.navigateByUrl('/', {skipLocationChange: true}).then(() => this.router.navigate(['/run/state'])); } } }); Надеюсь, это сработает для вас

...