AuthGuard при возврате false и перенаправлении на pageNotFound создает 2 экземпляра предыдущей страницы - PullRequest
0 голосов
/ 07 января 2019

Я использую 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...