2017-10-18 2 views
0

私の状況で私は認証ガードCanActivate()すべてのルートのユーザーアクセスを制限していますが、条件値はhttp要求Promiseオブジェクトから取得されています。 Promise then()とcatch()にアクセスしてCanActivate(): Boolean関数に戻すにはどうしたらいいですか?約束を含む関数にthen()/ catch()の結果を返すには?

私のコードは次のようになります。

// On AuthService 
verfifyUser(): Promise<any> { 
    return this.http 
     .get(`api/auth/verify-user`, { headers: this.headers }) 
     .toPromise() 
     .then(res => res.json() as any); 
} 


// On AuthGuardService 
CanActivate(): Boolean { 
    this.authSrv.verfifyUser(some_user).then(result => { 
     // return true 
    }).catch(err => { 
     // return false 
    }); 
} 

私はまだこの問題を解決する方法を見つけることができません。

答えて

4

CanActivatecanActivateメソッドの戻り値の型はObservable<boolean>|Promise<boolean>|booleanです。

canActivate(): Promise<boolean>バージョンを使用してPromiseを返すことができます。あなたはそこに私は、このいずれかをしようとしますが、結果のちょうど好奇心、 `{パスでこれを使用することがまだ有効である

canActivate() : Promise<boolean> { 

    return new Promise(resolve => { 

     this.authSrv.verfifyUser(some_user).then(result => { 
     resolve(true); 
     }).catch(err => { 
     resolve(false); 
     }); 

    }); 

} 
+0

こんにちはを書くことができる機能で:「いくつかのパス/」、コンポーネント:ClientComponent、canActivate: [AuthGuard]} '? –

+0

@ ShiftN'Tabもちろん、それは 'canActivate'関数の一つの変形です –

+0

私はあなたに感謝しています! –

関連する問題