Я думаю, что я делаю это гораздо логичнее. Думаю, это мнение. Я отделяю свое приложение от secured pages
и public pages
. Я использую шаблоны для каждого набора. Итак, public component
и secure component
затем положите guard
на secure template
.
Убедитесь, что вы добавляете [Guard]
на весь маршрут, который нуждается в защите.
Так что, когда я обеспечить маршрут я добавляю родителей app.routing.ts
const APP_ROUTES: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full', },
{ path: '', component: PublicComponent, data: { title: 'Public Views' }, children: PUBLIC_ROUTES },
{ path: '', component: SecureComponent, canActivate: [Guard], data: { title: 'Secure Views' }, children: SECURE_ROUTES }
];
export const routing = RouterModule.forRoot(APP_ROUTES);
Убедитесь, что эта линия Замечено,
{ path: '', component: SecureComponent, canActivate: [Guard], data: { title: 'Secure Views' }, children: SECURE_ROUTES }
Так я создаю 2 раскладок
/государственные/все общественные компоненты
/public/public.routes.ts
/безопасный/все безопасные компоненты
/secure/secure.routes.ts
Безопасные маршруты
Примечание что эти маршруты не нужны сейчас Guard
, потому что они обрабатываются родителем шаблона.
export const SECURE_ROUTES: Routes = [
{ path: '', redirectTo: 'overview', pathMatch: 'full' },
{ path: 'items', component: ItemsComponent },
{ path: 'overview', component: OverviewComponent },
{ path: 'profile', component: ProfileComponent },
];
Основные маршруты в app.routing.ц
const APP_ROUTES: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full', },
{ path: '', component: PublicComponent, data: { title: 'Public Views' }, children: PUBLIC_ROUTES },
{ path: '', component: SecureComponent, canActivate: [Guard], data: { title: 'Secure Views' }, children: SECURE_ROUTES }
];
export const routing = RouterModule.forRoot(APP_ROUTES);
И в директории/макеты, которые я создаю макет, который
/layouts/secure.component.ts
/layouts/secure.component.html
/layouts/public.component.ts
/layouts/public.component.html
Все проходит через макет public
или secure
и [Guard]
находится на безопасном.
Затем я обрабатываю аутентификацию с помощью токена в локальном хранилище.
@Injectable()
export class Guard implements CanActivate {
constructor(protected router: Router, protected auth: Auth) {}
canActivate() {
if (localStorage.getItem('access_token')) {
// logged in so return true
return true;
}
// not logged in so redirect to login page
this.router.navigate(['/home']);
return false;
}
}
После того, как я установил мое приложение вверх, как это я положил все свои маршруты, которые должны быть безопасными в защищенном каталоге и маршрутах общего пользования в общественных местах. Затем я создаю их маршруты в файле public.routes.ts или файле secure.routes.ts, который находится в соответствующем каталоге.
если мой ответ не имеет смысла, дайте мне знать человека. Я действительно думаю, что это должно помочь вам, основываясь на ваших обстоятельствах. в основном я говорю, что вы можете сделать один маршрут с охраной.Затем сделайте все остальные страницы сайта, которые должны быть защищены ребенком родительского маршрута с помощью Guard. – wuno