2017年10月29日のタイムシフト以来、私はfirebase製品で開発中にいくつかの本当に奇妙な動作をしています。Firebaseデータベースルールタイムスタンプの問題
私はIonic(3)でハイブリッドアプリを開発しています。私が開発しているブラウザ(モバイルエミュレートされたデバイス)でテストしている間、すべて正常に動作します。実際のデバイス(Samsung Galaxy S7、ルートなし、moddedなど)に切り替えると、タイムスタンプ付きのデータベースへのすべての書き込みが失敗します。私はこのようなタイムスタンプを作成して自分のコードで
:私はusualyこのようなタイムスタンプを検証する私のfirebaseルールでDate.now()
:私にとって
"timestamp": { ".validate": "newData.isNumber() && newData.val() <= now" }
このルールは意味、新しいデータつまり、データベースに書き込まれる必要があるデータは数値でなければならず、新しいデータの値は現在のサーバーのタイムスタンプ以下でなければなりません。これらの条件のいずれかが一致しない場合、クライアントに警告が表示されます。
私は一日をかけて自分のコードをデバッグしてバグを見つけました。タイムスタンプに関連するルールの.validate
キーを削除(コメントアウト)すると、すべて正常に動作します。
私はfirebaseルールのタイムスタンプ値で少し演奏しました。たとえば、私はサーバーのタイムスタンプに少しのバッファーを追加しました:(now + 10000)
(10秒)。
突然それが働いた。私はそれが私の実際のデバイスで動作しなくなるまで値を減らしました。私は(now + 5000)
(5秒)で止まった。
ここで私の質問は、なぜこの動作がそれであるかということです。
タイムシフトの前に、すべて正常に機能しました。私の理解では、クライアントのタイムスタンプがサーバーのタイムスタンプよりも先にある可能性はありませんでした。 (実際のデバイス上の現地時間は、ユーザー自身によって変更されたことを除いて)。
いくつかの助けを借りて、さらに5秒で回避策が少し汚れているようです。ところで
乾杯 Unkn0wn0x
:私はfirebaseルールを変更し、サーバ(群)にそれらを展開するたびに、私は約5分間待っていました。
[クライアントのクロックスキュー](https://firebase.google.com/docs/database/web/offline-capabilities#clock-skew)を確認するためのコードを追加することで、いくつかの洞察を得るかもしれません –