Я использую canActivate и canActivateChild для защиты моих маршрутов. Если пользователь пытается перемещаться, используя путь в URL, он не имеет доступа к нему, работает нормально, возвращая false. Но хотя он перенаправляет пользователя на страницу pageNotFound, он создает 2 экземпляра страницы, то есть URL-адрес, с которого пользователь пытался изменить путь. Поэтому при использовании кнопки «Назад» браузера мы нажимаем ее дважды, а не один раз.
Например.
Это основные маршруты
export const routes: Routes = [
{
path: "", // for default page{login}
redirectTo: "login",
pathMatch: "full"
},
{
path: "default-layout",
component: DefaultLayoutComponent,
canActivate: [AuthGuardService],
canActivateChild:[AuthGuardService],
children: defaultRoutes
},
{
path:'pageNotFound',
component:PageNotFoundComponent,
},
];
Детский путь
const defaultRoutes: Routes = [
{ path: "dashboard", component: DashboardComponent },
{ path: "no-access", component: NoAccessComponent },
{ path: "refer-friend", component: ReferFriendComponent },
{ path: "chart", component: ChartUI },
{ path: "home", component: ChartUI },
{ path: "stock-scanners", component: StockScanners },
]
Аутсервис
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.checkRoleAndGrantAccess(route, state)
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.checkRoleAndGrantAccess(route, state)
}
checkRoleAndGrantAccess(route, state) {
let roleList: any = []
let list: any = []
let value: any = false;
let obj:any
obj= this.paramService.getParams('roleList');
roleList=obj.roleList
if (localStorage.getItem('currentUser')) {
if (roleList) {
list = roleList.filter(item => item.routing == state.url);
if (list.length > 0) {
return true;
}
else {
this.router.navigate(['/pageNotFound']);
return false;
}
}
return true;
}
// not logged in so redirect to login page
this.router.navigate(['/login']);
return false;
}
Учтите, что мой текущий URL - это default-layout / dashboard, и я перехожу к default-layout / chart. Теперь, когда я использую кнопку «Назад» в браузере, она возвращается одним кликом без проблем.
Но если я использую неправильное после default-layout / chart, охранник переместит его на pageNotFound url. Теперь при нажатии кнопки браузера назад, когда он возвращается к default-layout / chart. (Теперь, нажав кнопку «Назад» еще раз, он должен вернуться к default-layout / dashboard), но это не так, и он возвращается к default-layout / chart. Как 2 экземпляра default-layout / chart генерируются в браузере. (один, когда мы переходим к default-layout / chart, а другой, когда authGuard возвращает false и переходит к pageNotFound)