Я хочу перенаправить с пустого пути "" на мою страницу входа, когда пользователь не вошел в систему. Поэтому я использую для этого защитные и дочерние маршруты.Однако мой код подходит для всех маршрутов, кроме "".
Это моя защита (функция canValidate)
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean {
return this.canMethod();
}
canMethod () {
if (Environment.ActivateGuard) {
let token = this._auth.getCookie(AuthorizationEnum.cookieName);
if(token) { // token exists
let data = {
token: token,
module: this.module
};
this._auth.validate(data, AuthorizationEnum.Bearer).subscribe(
data => { // valid token
if ( data.res == AuthorizationEnum.emptyResponse) { // invalid user, it doesn't belongs to this module.
this.letsRedirect();
}
else {
let user_role = data.det[1]; // this is the user's role!.
}
},
error => { // other error
this.letsRedirect();
}
);
return true;
}
else { // user don't have token
this.letsRedirect();
}
}
else {
return true;
}
}
letsRedirect(){
window.location.href = Environment.authAppUrl + AuthorizationEnum.redirectQuery + encodeURIComponent(this.url);
}
И это мой app-routing.module.ts (толькомассив маршрутов)
const routes: Routes = [
// TODO: Validar esta ruta
//{ path: '', component: LoginComponent, pathMatch: 'full' },
//Con header
{
path: '',
children: [
{ path: '', component: HomeComponent,canActivate:[AuthorizatedGuard]},
{ path: 'inicio', component: HomeComponent, canActivate:[AuthorizatedGuard] },
{ path: 'categorias', redirectTo: 'base-lista/categorias'},
{ path: 'videos', redirectTo: 'base-lista/videos'},
{ path: 'base-lista/:idList', component: BaseListComponent, canActivate:[AuthorizatedGuard] },
{ path: 'base-lista/categorias/gestionar-categorias', component: CategoryVideoComponent, canActivate:[AuthorizatedGuard] },
{ path: 'base-lista/categorias/ver-detalles-categoria', component: ViewDetailsCategoryComponent, canActivate:[AuthorizatedGuard] },
{ path: 'base-lista/videos/gestionar-videos', component: VideoComponent, canActivate:[AuthorizatedGuard] },
{ path: 'base-lista/videos/ver-detalles-video', component: ViewDetailsVideoComponent, canActivate:[AuthorizatedGuard] },
],
component: AppLayoutComponent,
canActivate: [AuthorizatedGuard],
},
//sin header
{
path: '',
component: LoginComponent,
children: [
{
path: 'login',
component: LoginComponent
}
]
}
];
Когда мы пытаемся получить доступ к "htpp: // localhost: 4200 /", Angular оценит пути маршрута.Первая часть пути для первого настроенного маршрута - "", поэтому давайте продолжим оценку второй части, которая также "", так что у нас есть совпадение!Но охранник все еще должен проверить, может ли пользователь получить доступ к HomeLayoutComponent (если пользователь вошел в систему).Если пользователь вошел в систему, то доступ предоставляется, и пользователь увидит HomeLayoutComponent (панель навигации вместе с HomeComponent, отображаемым в маршрутизаторе-розетке), в противном случае он будет перенаправлен на «htpp: // localhost: 4200 / login".
Итак, предположим, что мы пытаемся получить доступ к" htpp: // localhost: 4200 / login ".Angular снова оценит маршрут маршрута.Первая часть пути для первого настроенного маршрута - это «», поэтому давайте продолжим оценивать вторую часть, которая называется «вход в систему», поэтому мы не имеем соответствия с.Нам нужно оценить следующий настроенный маршрут.Давайте снова!Первая часть пути для первого настроенного маршрута - это «» (на этот раз), поэтому давайте продолжим оценку второй части, которая называется «вход в систему», и у нас есть совпадение.В этом случае отображается LoginLayoutComponent.Поскольку в шаблоне HTML есть только выход-маршрутизатор, будет отображаться только компонент LoginComponent.
Я использую эту ссылку для создания маршрутизации
Итак ..что не так с моим кодом?