У меня есть приложение Angular с защитой маршрута на домашнем маршруте.
{
path: "",
component: HomeComponent,
canActivate: [HomeRouteGuard],
}
Охранник проверяет, аутентифицирован ли пользователь, и возвращает true или UrlTree в противном случае.
public canActivate(): Observable<boolean | UrlTree> {
return this.userService.userIsSignedIn$.pipe(
map((signedIn) => {
if (signedIn) {
return true;
}
return this.router.parseUrl("/some-path");
}),
);
}
Это направляет пользователя на соответствующую страницу. Проблема возникает, когда они нажимают кнопку «Назад» в браузере. Вместо возврата на предыдущую страницу им снова открывается домашняя страница. Повторное нажатие назад направляет их на нужную страницу.
Навигация инициируется щелчком по тегу привязки с href, установленным на "/".
При отладке взаимодействия я заметил, что когда пользователь нажимает кнопку «Назад» при первом двойном вызове метода canActivate () в HomeRouteGuard. Когда пользователь нажимает кнопку «Назад» во второй раз, HomeRouteGuard вообще не рассматривается (как и ожидалось).
Кто-нибудь знает, что может вызывать такое поведение и как его обойти? Я специально хочу, чтобы пользователю не приходилось дважды нажимать кнопку возврата.
Уточнение : двойной возврат происходит, когда охранник маршрута направляет пользователя на другую страницу.
Похоже, это известная проблема. https://github.com/angular/angular/issues/27148