Ich benutze einen AuthGuard, um meine Routen zu schützen, und stelle sicher, dass ein Benutzer korrekt angemeldet ist, bevor er das Dashboard der App sehen kann.Angular2 benötigt das Ergebnis eines asynchronen Abrufs, um Zugriff auf eine Route zu ermöglichen
AuthGuard:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) {
// return true;
return this.userService.getValidLoginCheck();
}
jedoch Der getValidLoginCheck() keinen boolean zurückgeben:
getValidLoginCheck(): boolean {
let headers = new Headers();
let options = new RequestOptions({ headers: headers });
headers.append('authorization', this.getToken());
this.http.get(this.baseUrl + 'api/auth/checkToken', options)
.map(res => res.json())
.subscribe(data => {return data.message === 'valid token' });
}
Ich weiß, warum dies geschieht, aber wie kann ich die getValid ... Funktion warten zu lassen für das http.get zu beenden, damit ich meine Routen richtig bewachen kann?
Die App wird geladen, aber nicht die Komponente, da das Observable zunächst undefiniert ist. Wie kann ich warten lassen, bis es nicht definiert ist, etwas zurückzugeben? –
Was bedeutet, dass etwas zurückgeben sollte, bis canActivate return true. Möchten Sie den Wartezustand auf der Benutzeroberfläche anzeigen? –
zeigt die Komponente nicht, wenn sie auf true gesetzt ist –