Я пытаюсь перенаправить пользователя, если он переходит по неправильному дочернему маршруту. Я создал защиту для дочернего компонента, который запрашивает API для данных, но я не уверен, как я могу перенаправить пользователя, если данные не существуют. Я хотел бы отобразить 404 для пользователя, если данные не существуют или перенаправить на главную страницу. Извините, если продублирован, но я не смог найти решение для него.
Сценарий:
- Пользователь должен передать пароль, чтобы перенаправить его на свои фильмы. (Auth.Service)
public login(password: string) {
firebase.database().ref("clients")
.orderByChild("password").equalTo(password).once("value", snapshot => {
if (snapshot.exists()) {
const route = Object.keys(snapshot.val())[0];
this.router.navigate(["/strefa-klienta", route]);
} else {
this._snackBar.open(
"Podano błędne hasło. Spróbuj jeszcze raz.",
"Zamknij",
{ duration: 2000 }
);
}
});
}
Если он пройден, пользователь перенаправляется на свою страницу маршрута и запрашивает охрану данных (guard)
canActivate(
child: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | boolean {
return this.clientsState.loading$.pipe(
map(loading => {
if (!loading) {
this.clientsState.load(child.url[0].path);
}
return true;
}),
take(1)
);
}
}
Это мой app-routing.module
{
path: "strefa-klienta",
children: [
{
path: "",
pathMatch: "full",
redirectTo: "/"
},
{
path: ":id",
component: components.ClientSiteComponent,
canActivate: [guards.ClientGuard]
},
],
}
Например. У меня есть 2 пользователя [Джон, Рик] ("/ strefa-klienta / John"). Если кто-то попытается найти пользователя, которого не существует «Анна» («/ strefa-klienta / Anna»), я бы хотел показать 404.
Спасибо за помощь