2016-12-28 15 views
2

私はログアウトしようとしていますが、ログインURLに移動しようとしていますが、このURLのauthguardはログに記録されたユーザーに表示されないようにしています。メソッドイベントを2回クリックして機能させる必要があります。AngularFire 2 - Auth.logout()コールバック

logout(){ 
    this.angularfire.auth.logout(); 
    this.router.navigate(['']); 
    } 

約束が解決されたときにコールバック内にrouter.navigateを実装する方法はありますか?私はthen()を試しましたが、私の構文が間違っていたり、authの型付けに問題がありました...

+1

angularfire.auth.logout()関数缶)(無効であり、なぜあなたが使用できないことを何も返しません。 –

答えて

5

AngularFire2のlogoutは実際のFirebase SDKと同じように動作するはずです。幸いなことに数日前、がlogoutに変更されて約束を返すため、次のリリースで問題が解決されます。

それまでは、あなたはそれがナビゲートしても大丈夫ですかを決定するためにauth変化に耳を傾けることができます:

import "rxjs/add/operator/filter"; 
import "rxjs/add/operator/first"; 

... 

logout(){ 
    this.angularfire.auth 
    // You only want unathenticated states: 
    .filter((authState) => !authState) 
    // You only want the first unathenticated state: 
    .first() 
    // You should now be able to navigate: 
    .subscribe(() => this.router.navigate([''])); 
    // The composed observable completes, so there's no need to unsubscribe. 
    this.angularfire.auth.logout(); 
} 
+0

ええと...私はsdkを読んだので、それが約束を返すと仮定した理由です。ありがとう! – cerealex

0

。これは今firebase約束を返しsignOut()に置き換えられました。あなたはimport { AngularFireAuth } from 'angularfire2/auth';

をインポートするのであれば、あなたはその後、

constructor(public afA: AngularFireAuth){} 

logout(){ 
    this.afA.auth.signOut().then(() => { 
     this.router.navigate(['']); 
    }); 
} 
関連する問題