2017-09-27 11 views
0

現在のユーザーが存在する(ログインしている)かどうかを確認し、認証ガードで戻します。ファイアベースのauthガード

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
    firebase.auth().onAuthStateChanged((user: firebase.User) => { 
     if (user) { 
     return true; 
     } 
     return false; 
    }); 
    } 

しかし、私はこのエラーを得た:return文がcanActivate機能にリンクされていないよう

A function whose declared type is neither 'void' nor 'any' must return a value.

が見えます。

+1

以下のようにしてfirebase' ''前return'を追加(と '観測可能を'返すように関数のシグネチャを変更)する必要があります。 –

+0

thatsは解決策ですが、理由はありません。 – mnlfischer

答えて

1

あなたのガードcanActivateメソッドでは、戻り値の型はbooleanで、エラーが発生しているものは返されません。

この問題を解決するには、ブール値を返すことができます。しかし、あなたのケースで私はあなたの戻り値の型が観測可能であり、観測値の中に真または偽を戻したいと思うことがわかります。

あなたはガードを変更します。

あなたはfirebase.auth().onAuthStateChanged()の戻り値の型は、通常の方法のこれらの種類が観察返しているかどうか確認する必要が

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): : boolean | Observable<boolean> | Promise<boolean> { 
    return firebase.auth().onAuthStateChanged((user: firebase.User) => { 
     if (user) { 
     return true; 
     } 
     return false; 
    }); 
    } 

以下のように2事を行う必要があります。その場合は、あなたはそれを変更する必要が

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): : boolean | Observable<boolean> | Promise<boolean> { 
    return firebase.auth().onAuthStateChanged().map((user: firebase.User) => { 
     if (user) { 
     return true; 
     } 
     return false; 
    }); 
    } 
+0

thats it。ありがとうございました! – mnlfischer

+0

あなたはようこそ!それはうれしかった:) –

関連する問題