CanActivateを実装するAuthGuardによって保護されたルートを持つアプリケーションがあります。チェックを有効にして、ユーザーがログインしているかどうかを確認し、設定変数がtrueまたはfalseを返す前に設定されているかどうかを確認できます。ユーザーがログインしても構成変数が送信されていない場合、AuthGuardはHTTP呼び出しを行って構成設定を取得し、httpコールがエラーなしで解決されるとtrueを返します(そうでない場合はfalse)。Angular2:ルーターイベント:ルートガードが解決される前のNavigationCancel
問題は、設定コールが解決される前に、ルータが要求されたルートへのナビゲーションをキャンセルしていることです。以下は
はAuthGuard canActivate方法であって、私がログインしていると私は、ページにアクセスしようとすると、設定変数が設定されていないときに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;
}
}
(つまり私は**** HERE ****
で示される論理ブロックにいますよ) 、私はコンソールで参照してください。AuthGuard設定HTTP呼び出しが解決する機会を持っている
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
前AuthGuardがfalseを返されたかのように、ナビゲーションは取り消され、ルータがリダイレクトされます。私はAuthGuardにその結果をHTTPコールの解決に返す方法を見つけたいと思います。
あなたが始まる」何を意味しています**** **ここに******"? – CodyBugstein