1
私は自分のルートのいずれかに認証ガードを実装しようとしていますが、観測可能な方法ではそれを行う方法がわからないので動作できません。アングル2 authガードを観測可能にする方法
私はトークンを保存するために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;
}
}
);
}
}
ここで問題は、ガードがブール値ではなく観測値を返すということです。 true
を返すelse
の中に入っても、ルートがレンダリングされない原因になります。
ガードが観測可能ではなくブール値を返すようにするにはどうすればよいですか?
ニースは、インポートする必要なくテイクを使用することができますが表示されます。ありがとう。 – Chrillewoodz
おそらく、それをカバーする別のインポートがあります。一度にすべてをインポートすることも、使用するものだけをインポートすることもできます。それを聞いてうれしいことがあなたの問題を解決します。 –
私はrxjsライブラリから 'Observable'をインポートします。そのインポートに自動的に含まれているかどうかはわかりません。実際に働いている間は気にしないでください:P – Chrillewoodz