2017-12-12 9 views
0

したがって、プロジェクトのアーキテクチャは次のとおりです。角度+ Firebase。 Angularコンポーネントは、Firebaseからデータを保存/取得するためにサービスのメソッドを呼び出します。ユーザがログアウトした後にサービス内の変数を角度でリセットする

動作:ユーザーはログインし、何らかのアクティビティを実行して(データを保存/取得して)ログアウトします。別のユーザーが同じ/別のタブに同じブラウザウィンドウでログインした場合、データが保存されます。 データはFirebaseの以前にログインしたユーザーの場所に保存されます。

これは予期した動作であることを確認しますか?

は、サービスのコンストラクタでは、私は現在

constructor() { 
    this.user = firebase.auth().currentUser; 
    // some other code 
} 

をログに記録フェッチするコードを書かれているしかし、それはアプリケーションの第二/連続したユーザーのために呼び出されることはありませんです(最初/前のユーザがログアウトした後) 。

私は確信していませんが、確認したいのですが、新しいユーザーがログインしたときにサービスのコンストラクタが再度呼び出されるのではないですか? または、私がこの方法で入れてみましょう。ユーザーがログアウトすると、現在ログインしていない場合、firebase.auth()。currentUserがnullを返すため、 "service"の "user"変数をnullに設定しないでください。ユーザー!

答えて

0

サービスはシングルトンです。つまり、アプリケーションライフサイクル中にインスタンスが1つしか存在しないことを意味します。

いいえ、2回呼び出されることはありません。これがあなたの問題です。

これを解決するためにできることは、コンストラクターが行うことを行う関数を作成し、ユーザーのログイン時にこの関数を呼び出すことです。これにより、ユーザーデータが更新されます。

+0

このシナリオを処理するために別の関数を作成しました。 –

0

あなたは

ユーザーがログイン中で何を意味するのは、いくつかのアクティビティ(セーブ/データを取得)し、ログ アウトを行います。

? ログアウトしていませんか?

signOut() { 
    this.user = null; 
    firebase.auth().signOut(); 
    } 

もしそうなら、問題はありません。

+0

ありがとう、firebase.auth()。signOut();を使用しました。 Authサービスではなく、UserDetailsサービスでは使用できません。 –

+0

は1か所にあり、すべてのサービス/コンポーネントを呼び出す必要があります。 – ishandutta2007

+0

ええ、私はそれを世話します。提案ありがとう! –

関連する問題