Angular2ルーターガードを使用して、アプリの一部のページへのアクセスを制限しようとしています。Firebase認証を使用しています。ユーザーがFirebaseでログインしているかどうかを確認するには、コールバックを使用.subscribe()してFirebaseAuthオブジェクトを呼び出す必要があります。これはガードのコードです:
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFireAuth } from "angularfire2/angularfire2";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs/Rx";
@Injectable()
export class AuthGuard implements CanActivate {
    constructor(private auth: AngularFireAuth, private router: Router) {}
    canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean>|boolean {
        this.auth.subscribe((auth) => {
            if (auth) {
                console.log('authenticated');
                return true;
            }
            console.log('not authenticated');
            this.router.navigateByUrl('/login');
            return false;
        });
    }
}
ガードが設定されているページに移動するときauthenticated、またはnot authenticatedコンソールに出力されるとき(Firebaseからの応答を待つために少し遅れて)。ただし、ナビゲーションが完了することはありません。また、ログインしていない場合は、/loginルートにリダイレクトされます。したがって、私が抱えている問題はreturn true、要求されたページがユーザーに表示されないことです。これは、コールバックを使用しているためだと思いますが、それ以外の方法を理解できません。何かご意見は?