0

firebaseのドキュメントには、書き込み操作のイベント保証が含まれています。「単一のクライアントからの書き込みは、常にサーバーに書き込まれ、他のユーザーに順番にブロードキャストされます。Firebaseが非書き込み操作を保証するイベントの順序は?

しかし、非書き込み操作、つまり読み取りイベントまたは認証イベントに関する情報は見つかりませんでした。 私は以下のユースケースを考える:私のFirebase DBへ

アクセスが認証される必要があり、私はどうなるアプリケーションの初期化のよう:

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.authWithPassword({ 
    "email": "[email protected]", 
    "password": "correcthorsebatterystaple" 

}

を次に最初にHTMLがしなければならない場合レンダリングされると、必要なデータがFirebaseから取得されます。

ref.once("value", function(data) { 
    // do some stuff once 
}); 

私のアプリケーションでは、データの検索前にns。

読み取りが行われる前に認証が行われていることをFirebaseは保証しますか?または、初期化がまだ完了していないため、読み取りがパーミッションエラーで失敗することはありますか?

答えて

0

このような保証はなく、必要もありません。 authWithPassword()コールで完了リスナーを使用して発注保証を取得することができます。​​から:

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.authWithPassword({ 
    "email": "[email protected]", 
    "password": "correcthorsebatterystaple" 
}, function(error, authData) { 
    if (error) { 
    console.log("Login Failed!", error); 
    } else { 
    console.log("Authenticated successfully with payload:", authData); 
    } 
}); 

あなたはその最後のelseブロックであなたのonce()リスナーを付けることができます。

同様に、認証が行われる(または状態が変更される)ときに、リスナーをonAuth()として使用できます。 Firebase documentation for onAuth()から:再びここ

ref.onAuth(function(authData) { 
    if (authData) { 
    console.log("Authenticated with uid:", authData.uid); 
    } else { 
    console.log("Client unauthenticated.") 
    } 
}); 

、あなたはelseブロックにリスナーを添付したいです。

2つのサンプルの違いは、最初のコールバックはユーザーがアクティブに認証されたときにのみ起動し、2番目のコールバックはたとえばページの再読み込みで発生することです。どちらを使用するかは、アプリによって異なります。

+0

はい、私はリスナーについて知っていますが、私はこのリスナーのものを自分のアプリケーションのアーキテクチャーに持っていく方法はよく分かりません。私はAngularを使用していますが、ユーザーは別のHTMLページに直接アクセスできます。最初にページにアクセスすると、Angular framworkが起動します。これが認証を行う場所です。角度をつけて処理を続行し、最後にユーザーが見たいビューをレンダリングします。コントローラ内にデータを取得します。したがって、アプリケーションの設計時点から、これらの2つのアクションは互いに非常に遠く離れています。これはgooadアーキテクチャのやり方でどうやって処理できますか? – magicwerk

+0

上記の私のコメントを明確にするために、認証はテクニカルユーザを使用して行われるので、ユーザの介入なしに行うことができます。 – magicwerk

+0

さらに進んでください:少なくとも、読み書き操作を混ぜると保証があります。したがって、最初にノード上でset()を呼び出してからonce()を使用してそれを読み込んだ場合、前に行った変更を確認する必要があります。これは保証されていますか?したがって、書き込み/読み出し操作の順序が保証されている場合、読み取り/読み取り操作の順序が保証されないのはなぜですか? – magicwerk

関連する問題