2017-09-21 4 views
0

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コールの解決に返す方法を見つけたいと思います。

答えて

-1

誰であれば、この問題が発生した場合、私は次のように(*****HERE******で始まる)elseブロックの内容を置き換えることで問題を解決:

return this.authService.setConfig() 
        .map(
        config => { 
         // SET CONFIG VARIABLES 
         console.log("Config variables set"); 

         // allow route access 
         return true; 
        }) 
        .catch(err => { 
         console.error(err); 
         this.router.navigate(['/Login']); 
         return Observable.of(false); 
        }); 
+0

あなたが始まる」何を意味しています**** **ここに******"? – CodyBugstein

関連する問題