В моем приложении Angular я хотел бы иметь набор маршрутов для неаутентифицированных пользователей и набор маршрутов для аутентифицированных.Например, вы не сможете войти на страницу входа в систему / login при аутентификации.
Это я могу легко настроить.Настоящая проблема возникает, когда я хочу, чтобы «отправной точкой» для обоих сценариев была /.Я имею в виду, что при первом входе на веб-сайт (конечно, не прошедший проверку подлинности) вы должны видеть страницу приветствия как http://example.com/. Когда вы входите в систему и проходите аутентификацию, вы также должны видеть URL-адрес как http://example.com/.
Сначала у меня был AppComponent
рендер PublicComponent
, если он не был аутентифицирован, и мой маршрут, если он аутентифицирован.Это работало до тех пор, пока мне не пришлось реализовывать больше страниц для неаутентифицированных пользователей, и для этого не требовался маршрутизатор;PublicComponent
было недостаточно.
Я пробовал несколько вещей, но ни одна из них не работала.Либо компонент не может быть найден в навигации, либо он не отображается.
Прямо сейчас у меня есть маршруты
{
path: "",
component: PublicComponent // unauthenticated
},
{
path: "pageA",
component: PageAComponent // unauthenticated
}
{
path: "",
component: HomeComponent, // authenticated
outlet: "authenticated"
},
{
path: "pageB",
component: PageBComponent, // authenticated
outlet: "authenticated"
},
{
path: "pageC",
component: PageCComponent, // authenticated
outlet: "authenticated"
},
{
path: "**",
component: PageNotFoundComponent
}
app.component.html
:
<div *ngIf="isAuthenticated(); else notAuthenticated">
<router-outlet name="authenticated"></router-outlet>
</div>
<ng-template #notAuthenticated>
<router-outlet></router-outlet>
</ng-template>
Кажется, что маршруты без проверки подлинности (без выхода) работают должным образом.Я могу перемещаться между ними.При входе в маршрут с аутентифицированным выходом он переходит на шаблон, в данном случае PageNotFoundComponent
.Это нормально.
Когда вы входите в систему и становитесь аутентифицированным пользователем, HomeComponent
приветствует меня в / как следует, но, похоже, также обгоняет другие маршруты.Например, при вводе / pageB HomeComponent
инициализируется и снова отображается.Поэтому я попытался дать ему полное совпадение путей, чтобы не допустить переопределения других путей.
...
{
path: "",
component: HomeComponent,
outlet: "authenticated",
pathMatch: "full"
},
...
А теперь остальные страницы просто пустые.Компоненты не отображаются так, как будто они не могут их найти, но ошибок также нет.Я могу ввести любой бессмысленный URL-адрес и получить пустую страницу.
Я отказываюсь верить, что это невозможно сделать.Итак, любая помощь или совет с благодарностью!Спасибо!
Редактировать
Да, я пробовал AuthGuard, но пока не смог заставить его работать с моими настройками.