gelöst Ich habe eine Anwendung mit Routen von einem AuthGuard bewacht, die CanActivate implementiert. Kann Prüfungen aktivieren, um festzustellen, ob der Benutzer angemeldet ist, und dann prüfen, ob Konfigurationsvariablen gesetzt sind, bevor Wahr oder Falsch zurückgegeben wird. Wenn der Benutzer angemeldet ist, aber keine Konfigurationsvariablen gesendet wurden, führt AuthGuard einen HTTP-Aufruf zum Abrufen des Konfigurations-Setups aus und gibt true zurück, sobald der HTTP-Aufruf ohne Fehler aufgelöst wurde (andernfalls false).Angular2: Router Ereignis: NavigationAbbrechen vor Route Guard hat
Das Problem ist, dass der Router die Navigation auf die angeforderte Route abbricht, bevor der Konfigurationsanruf gelöst wurde.
Unten ist die AuthGuard canActivate Methode:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let authenticated = this.isAuthenticated();
if (authenticated) {
console.log("User authenticated, checking for configs...");
if (this.config.defined) {
console.log("Config defined!");
return true;
} else {
***** HERE ******
console.log("Config not defined, setting configs...");
this.authService.setConfig()
.take(1)
.subscribe(
config => {
// SET CONFIG VARIABLES
console.log("Config variables set");
// allow route access
return true;
},
err => {
console.error(err);
this.router.navigate(['/Login']);
return false;
}
);
this.router.navigate(['/Login']);
return false;
}
} else {
console.log("User not authenticated, back to login");
this.router.navigate(['/Login']);
return false;
}
}
Also, wenn ich angemeldet bin in und die Konfigurationsvariablen gesetzt sind nicht wenn ich versuche, auf eine Seite zuzugreifen (dh ich bin in logischen Block von **** HERE ****
bezeichnet) zu sehen, die ich in der Konsole:
Setting config...
NavigationCancel {id: 1, url: "/", reason: ""}
NavigationStart {id: 2, url: "/Login"}
RoutesRecognized {id: 2, url: "/Login", urlAfterRedirects: "/Login", state: RouterStateSnapshot}
NavigationEnd {id: 2, url: "/Login", urlAfterRedirects: "/Login"}
Config variables set
Bevor der AuthGuard Config http Aufruf eine Chance hat, zu lösen, wird die Navigation abgebrochen und der Router leitet, als ob der AuthGuard falsch war zurückgekehrt. Ich möchte einen Weg finden, damit AuthGuard sein Ergebnis bei der Auflösung des http-Aufrufs zurückgibt.
was meinst du mit „**** mit Start **HIER******"? – CodyBugstein