ルートの 1 つに認証ガードを実装しようとしていますが、オブザーバブルでそれを行う方法がわからないため、機能させることができません。
私はngrx/store
自分のトークンを保存するために使用し、ガードで を使用してそれをthis.store.select('auth')
フェッチします。これにより、次のようなオブジェクトがフェッチされます (ログインしている場合)。
{
token: 'atokenstring',
isAuthenticated: true,
isPending: false
}
そして、ガードは次のようになります。
export class AuthGuardService implements CanActivate {
constructor(private router: Router, private store: Store<IStore>) {}
canActivate(): Observable<any> {
return this.store.select('auth').let((state: Observable<IAuthStorage>) => state.filter((auth: IAuthStorage) => !auth.isPending && auth.isAuthenticated)).map(
(auth: IAuthStorage) => {
if (!auth.isAuthenticated) {
return this.router.navigateByUrl('admin/login');
}
else {
return true;
}
}
);
}
}
現在、問題は、ガードがブール値ではなくオブザーバブルを返すことです。else
これにより、戻り値の中に入ってもルートがレンダリングされませんtrue
。
ガードがオブザーバブルではなくブール値を返すようにするにはどうすればよいですか?