問題タブ [firebase]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
firebase - データの変更をインターセプトし、サーバーから変更/検証する
node.jsサーバーからのデータへの変更を傍受し、他のクライアントに保存/同期する前にそれらを検証/変更するソリューションに取り組んでいます。
現在のコードベースでこれを解決する方法に関する戦略や提案はありますか?
現在、唯一のオプションは、同期後の操作を書き直すことのようです。これは、おそらく各クライアントが (サーバーを含む) 同期を受信し、サーバーがデータを書き換えて 2 回目の同期をトリガーすることを意味します。
質問の文脈を理解するのを助けるために、私のニーズにとって理想的な戦略のように見えるものは次のとおりです。
- サーバーは、クライアントが利用できない特別なトークン/キーを取得します(セキュリティが発生した場合)
- サーバーは次のような依存性注入を登録します
firebase.child('widgets').beforeSync(myCallback)
- クライアントはデータを同期します
- サーバーコールバックが通知されます
- サーバーがデータを変更または検証する
- 有効な場合は、同期操作のためにそれを firebase に返します
- 無効な場合、クライアントに返されるエラーで同期を中止します
firebase - Firebase エントリの名前にコンマを含めることはできますか?
したがって、コンマを使用した名前付けは問題なく機能します。しかし、URL を ref に渡したいとしましょう。
toString() 関数は、コンマを「%2C」に置き換えたバージョンの URL を返します。URL がまだ使用可能であれば、これで問題ありません。
これはバグですか、それともユーザーが次のようなことをしなければならない正当な理由がありますか?
使用可能な Firebase URL を取得するには?
firebase - 複数のワーカーでキューを作成するにはどうすればよいですか?
クライアントがリクエストを入れることができるキューを作成したいのですが、リソースが利用可能になったときにサーバーワーカースレッドがリクエストを引き出すことができます。
Firebase にデータを注入し直さなければならない外部キュー サービスではなく、Firebase リポジトリでこれを行う方法を模索しています。
セキュリティと検証ツールを念頭に置いて、私が考えていることの簡単な例を次に示します。
- ユーザーはリクエストを「キュー」バケットにプッシュします
- サーバーはリクエストを取り出して削除します ( 1 つのサーバーだけがリクエストを受け取るようにするにはどうすればよいですか? )
- サーバーはデータを検証し、プライベート バケットから取得します (または新しいデータを挿入します)
- サーバーはデータやエラーをユーザーのバケットにプッシュします
これが役立つ可能性がある場所の簡単な例は、認証です。
- ユーザーが認証要求をパブリック キューに入れる
- 彼のログイン/パスワードは彼のプライベート バケット (彼だけが読み書きできる場所) に入れられます
- サーバーは認証リクエストを取得し、ログイン/パスワードを取得し、サーバーのみがアクセスできるプライベート バケットに対して検証します。
- サーバーはトークンをユーザーのプライベート バケットにプッシュします
(確かに、パブリック キューにはまだセキュリティの抜け穴がいくつかあります。この時点で調査しているところです)。
その他の使用例:
- 読み取り専用ステータス キュー (ユーザー ステータスはプライベート バケットを介して伝達され、サーバーはパブリックに対して読み取り専用であるパブリック バケットに書き込みます)
- メッセージ キュー (メッセージはユーザー経由で送信され、サーバーはメッセージがドロップされるディスカッション バケットを決定します)
質問は次のとおりです。
- これは、今後のセキュリティ計画にうまく統合できる優れた設計ですか? 検討されている代替アプローチにはどのようなものがありますか?
- すべてのサーバーがキューをリッスンするようにするにはどうすればよいですか? ただし、各要求を取得するのは 1 つのみです。
firebase - Firebase 接続が失われたか回復したかを検出する
サーバー接続が失われたり回復したりしたかどうかを検出するために、現在の Firebase 製品内で機能する戦略はありますか?
モバイル デバイスのオフラインの不測の事態を考慮しており、Firebase データ レイヤーがいつ利用可能になるかを判断するための信頼できる手段が必要です。
json - firebaseのjsonデータ形式 - 配列はサポートされていますか? または、オブジェクトのみがサポートされている場合、辞書は整数で番号付けできますか?
私はfirebaseをいじっていて、データ構造に興味があります。データベースを参照すると、firebase を使用して、データベース内の構造とデータを変更できます。しかし、firebase はオブジェクト (およびリストの辞書) のみをサポートしているようです。
配列がサポートされているかどうかを知りたいです。また、辞書項目に整数で名前を付けることができるかどうかも知りたいです.firebaseインターフェースは文字列を名前として挿入するだけなので、レコードの順序付けが心配です.
これは、firebase インターフェイスを介して作成された json のサンプルです。
明らかに、私のリストでは、並べ替えが正しいことを確認できるように、辞書項目名を整数にする必要があります。
firebase - Firebaseの参照からのhasChild()とforEach()の適切な使用?
私の限られた理解と SQL のバックグラウンドにより、hasChild() と forEach(); の使用法を完全に理解しているわけではありません。スナップショットではなく参照に属しているように感じます。
(以降の説明では hasChild() を使用しますが、概念は交換可能です。)
これが私の推論です:
- users テーブルに対して呼び出される Firebase パスがあります。
appname/users
- ユーザー (Fred) が存在するかどうかを確認したい
- 私は参照を取得します:
var users = new Firebase('appname/users')
しかし、ここから子供が存在するかどうかは判断できません。だからここに私が今持っているものがあります:
しかし、それはうまくいきません。したがって、次のような方法でユーザーの値を取得する必要があります (私はユーザーに興味がないので、これは少し直感に反するように感じます)。
ドキュメントに基づいて、フェッチすることで大きなオーバーヘッドが発生するとは思いませんappname/users
が、キー「Fred」が存在するかどうかを判断したいだけの場合、これは見苦しいコードのように感じます。
私は次のようなものを見たいです:
forEach/hasChild を使用するより良い方法はありますか? ここで重要な論理的考慮事項を見逃していませんか?
javascript - firebase を使用してエラーを効果的に処理するにはどうすればよいですか?
私はfirebaseのドキュメントを読んできましたが、使用されているのは非常に多くの非同期コードです。firebase がエラーをスローしているか、および/またはコールバックでエラー データを渡しているかを知りたいと思いました。私が知る限り、ドキュメントはそれについて言及していません。事前にアドバイスをありがとう
firebase - レコードの総数を取得するFirebaseのより良い方法
トランザクションドキュメントの2番目の段落から:
ここでの目的は、クライアントが送信されるチャットメッセージの総数を増やすことです(これを実装するためのより良い方法があることをしばらく無視してください)。
これを実装するためのいくつかの標準的な「より良い方法」は何ですか?
具体的には、最新の50レコードを取得するなどの方法を検討しています。これには、リストの最後から開始する必要があるため、最後のレコードが何であるかを判別する方法が必要です。
私が見たオプション:
- トランザクションを使用して、レコードが追加されるたびにカウンターを更新します。順序付けには、setPriority()でカウンター値を使用します。
- forEach()は親であり、すべてのレコードを読み取り、クライアントで独自の並べ替え/フィルタリングを行います
- Firebaseテーブルを分析し、「mostRecentMessages」や「totalNumberOfMessages」などのインデックス付きリストを作成するサーバーコードを記述します
明らかな選択肢がありませんか?
javascript - タイマーでの JavaScript インジェクションの防止
私は、10 秒ごとにi
インクリメントされるブラウザ ゲームを作成しています。ポイント アルゴリズムはi
、付与されるポイント数を決定するために使用します。(私にとって)これを行う明白な方法はsetInterval(10000)
、タイマーに使用し、関数内でポイント計算を実行することです。
JavaScript インジェクションが増加し、ユーザーが実際よりも長くプレイしているとアプリに思わせるのを防ぐにはどうすればよいですか?i
バックエンドとして Firebase を使用しています。PHP プログラマーとして、私は通常、プレイヤーがポイントを送信するときに、開始時間と終了時間をチェックしてサーバー側で検証するだけです。Firebaseでもこれを行うことができると思うので、おそらく自分の質問に答えただけです...
それでも、JavaScript インジェクションを防ぐ方法はありますか? (サーバー側の検出ではなく、防止)。
javascript - Firebase フィールドの遅延更新
users
フィールドを持つ参照を持つ Firebaseがありますuser_id
。( [Firebase]/[app]/users/user_id
)
ユーザーを挿入し、user_id を割り当てます。しかし、userRef (への参照) から user_id の値を読み取ると、最初users
は読み取られません。後続の読み取りは完全に正常に機能します。
user_id
デバッガーを使用すると、ユーザーの作成時に aが割り当てられていることがわかります。最初の呼び出しで Firebase 参照が更新され、その後の呼び出しで更新された Firebase が表示されるようになったようです (それが何であるかはわかりません。それが表示されるだけです)。
これはの値を読み取るための私のコードですuser_id
:
初めて、アラートが表示されます0
。その後は毎回、正しい値が表示されます。
問題をさらに奇妙にするために、 と同じ方法で作成された をgames
参照しています。しかし、私の読み取りは(まったく同じ方法で同時に)毎回機能します。game_id
user
game_id
何か案は?