2017-03-04 10 views
1

最後に、さまざまなユーザーを自分の役割別にアプリの別の領域に誘導しようとするとCanActivateを取得しました。しかし、間違ったルートに行くと、リダイレクトすることができません。ここに私が持っているものは次のとおりです:PromiseをCanActivateする<boolean>拒否した後にnavigatebyurlしない

canActivate(route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot): Promise<boolean> { 
    return new Promise((resolve, reject) => { 

     this.af.auth.subscribe(user => { 

      if (user) { 
       let userProfile = firebase.database().ref(`/users/${user.uid}`); 
       userProfile.once("value", (snapshot) => { 
        let userInfo = snapshot.val().role; 
        if (userInfo === "GroupA") { 
         resolve(true); 
        } else { 
         reject(this.router.navigate(['/login'])); 
        } 
       }); 

      } else { 
       reject(this.router.navigate(['/login'])); 
      } 

     }); 

    }); 
} 

なぜrouter.navigateしませんか?これを行うためのより良いアイデアについて聞いて100%オープン。

+0

間違ったルートとは何を意味していますか?定義されていないルートを意味します。彼が間違ったルートに行くとredirecにあなたのルーティングファイルのワイルドカード**を使用することができます –

+0

両方のルートが定義されています。/GroupAと/ GroupBはどちらのユーザールートにもアクセスできません。したがって**は両方を有効なルートとして認識します。 – dhndeveloper

答えて

1

これは機能します。

canActivate(route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot): Promise<boolean> { 

    let promise = new Promise((resolve, reject) => { 

     this.af.auth.subscribe(user => { 

      if (user) { 
       let userProfile = firebase.database().ref(`/users/${user.uid}`); 
       userProfile.once("value", (snapshot) => { 
        let userInfo = snapshot.val().role; 
        if (userInfo === "provider") { 
         resolve(true); 
        } else { 
         reject(false); 
        } 
       }); 
      } 
     }); 

    }).catch(() => { 
     this.router.navigate(['/login']) 
    }); 

    return promise.then(() => { 
     return true; 
    }, error => { 
     console.log(error); 
    }) 
} 
} 
関連する問題