Ich versuche, eine Route Guard zu schreiben. Hier ist mein Weg ...Kann App nicht zum Portal navigieren
{ path: 'portal', component: PortalComponent, canActivate: [AuthGuard] }
Und hier ist AuthGuard:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private appState: ApplicationState, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
let url: string = state.url;
return this.checkLogin(url);
}
checkLogin(url: string): Observable<boolean> {
return this.appState.User.map(
(user) => {
if (user.UserToken) return true;
this.navToLogin(url);
return false;
}
);
}
private navToLogin(redirUrl: string) {
this.appState.RedirectUrl = redirUrl;
this.router.navigate(['/']);
}
}
Und hier ist ApplicationState, wo Sie die Benutzersuche von ...
@Injectable()
export class ApplicationState {
private _user: BehaviorSubject<LoginUser> = new BehaviorSubject<LoginUser>(new LoginUser());
get User() {
return this._user.asObservable();
}
}
ich der Benutzer möchte in der Lage sein, Zugriff auf die/portal-Route, wenn das UserToken für das User-Objekt existiert. Wenn das Token jedoch nicht existiert, möchte ich, dass der Benutzer zur Anmeldeseite (Standardroute /) navigiert.
Ich habe einen Link zu/Portal, das ich versucht zu klicken. Und die appState.User.map in checkLogin() gibt true zurück, die App navigiert jedoch nie zu/portal.
Was mache ich falsch? Ist das eine dieser "kalt beobachtbaren" Situationen?