У меня проблема в том, что когда я выхожу из системы и перехожу на /
, защита canActivateChild не выполняется для перенаправления на вход в систему.
Мое требование состоит в том, чтобы ни одно из приложений не было доступно без входа в систему.
Вот мой корневой конфигурационный маршрут:
const appRoutes: Routes = [
{
path: '',
pathMatch: 'full',
redirectTo: '/dashboard',
},
{
path: 'login',
component: LoginComponent
},
{
path: '',
runGuardsAndResolvers: 'always',
children: [
{ path: 'dashboard', component: DashboardComponent },
],
canActivateChild: [AuthGuard],
}
// { path: '**', component: PageNotFoundComponent }
];
Здесь мой AuthGuard (userState
) вызывается с canActivateChild
private userState(nextRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean|UrlTree> {
return this.auth.authState.pipe(
first(),
map(user => {
if (user != null) {
return true;
} else {
const url = this.router.parseUrl('/login');
console.log('redirect url', state.url);
url.queryParams['redirect'] = state.url;
return url;
}
}),
);
}
При входе в систему я могу перейти к/
или redirect
queryParam, если он существует.При выходе из системы, я перехожу к /
, идея состоит в том, что он будет перенаправлен на dashboard
, и, поскольку приборная панель защищена и пользователь имеет значение null, перейдите к /login?redirect=dashboard
.
Все работает, кромеПоследняя часть.Когда я выхожу из системы, он перенаправляет на панель мониторинга, но НЕ активирует защиту canActivateChild, успешно завершая перенаправление на панель мониторинга.Если я заменим canActivateChild
на canActivate
, он будет работать как нужно.
Более подробная информация: