У меня есть Guard на моих маршрутах для предотвращения несанкционированного доступа. Охранник проверяет сеанс и вызывает службу входа в систему, если он недействителен. У меня настроены маршруты следующим образом...
const routes: Routes = [
{ path: 'logon', loadChildren: './logon/logon.module#LogonModule' },
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', loadChildren: './home/home.module#HomeModule', canActivate: [HomeGuard] },
{ path: 'forms', loadChildren: './forms/forms.module#FormsModule', canActivate: [FormsGuard] },
{ path: 'processes', component: ProcessesComponent, canActivate: [ProcessGuard] },
{ path: '**', redirectTo: 'home' }
];
Фрагмент кода от Guard...
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
// This always reports home !
alert('Logon Guard - State = ' + state.url);
if (this.logonService.IsLoggedOn()) {
return true;
}
else {
// Tell the clientApp what url was in use when calling the canActivate.
this.logonService.RedirectUrl = state.url;
this.router.navigate(['logon']);
return false;
}
}
Я хотел перенаправить на первоначально запрошенный маршрут после входа в систему и попытался использовать URL-адрес RouterStateSnapshot для получения запрошенного маршрута. Однако он ВСЕГДА удерживает маршрут, указанный по умолчанию.
{путь: '', redirectTo: 'домой', pathMatch: 'полный' },
Поэтому, если я перейду к маршруту «процесс», т. е. «http://localhost:4200/process, canActivate в Guard всегда будет содержать «домашний» маршрут в свойстве URL-адреса RouterStateSnapshot.
Я видел следующий аналогичный запрос... возвращает правильный URL
Я пытался предложить указать другого охранника для каждого маршрута (от отчаяния), но это не работает. Это точно не ответ? Должен ли я иметь возможность использовать аутентификацию Guard среди маршрутов?
Я использую Ангуляр 4.