私はFirebaseを使用してユーザーを含むプロジェクトを構築しています。ユーザーがFirebase Authenticationセクションから削除された後でも、ユーザーは引き続きアプリケーションにアクセスでき、データベースに対する読み取り/書き込み権限を持っているFirebaseの既知のバグがあります。私は、トークンがFirebaseによってユーザのデバイスに保存されていることと関係があると考えています。Firebaseのデータ取得が散発的に返されない
これを回避するために、私のアプリケーションがログインしたユーザーのuserIDがリアルタイムデータベースに存在するかどうかを確認する「ユーザーチェック」を実装しました。こうすれば、リアルタイムデータベースからuserIDノードを削除するだけで、この検査が失敗し、ユーザーを永久にログアウトさせることになります。
私が抱えている問題は、observeSingleEvent(of: .value...)
への呼び出しが散発的に戻ってこないことです。これは、私は時にはそれが期待どおりにすぐに戻ることを意味しますが、時にはそれはまったく返されません。たとえば、昨日の朝、それは全く働いていなかった。昨日の午後と夜はうまくいった。今、今日はもう働きません。以下のコード...
func checkDatabaseForFIRUser(withId: String, callback: @escaping (Bool)-> Void) {
let fireUsersRef = fireRootRef.child("all-users").child(withId)
fireUsersRef.observeSingleEvent(of: .value, with: {(snapshot)-> Void in
print("user check result -> \(snapshot)")
if snapshot.exists() {
print("SNAP EXISTS")
callback(true)
} else {
print("SNAP NOT EXISTS")
callback(false)
}
}, withCancel: {(error)-> Void in
print("CANCEL BLOCK ERROR = \(error) and localized description = \(error.localizedDescription)")
})
}
はまた、私は、私はまた、データベースに何かを書くことができませんデータを取得することができません時間の間に、それはすべての作品で何かのようであることに気づきました。私のFirebaseルールは誰でも読み書きできるように "公開"に設定されています。私のデバイスでインターネット接続が正常に動作しています
EDIT:すべてがSimulatorで正常に動作します。問題は、実際のデバイス上で発生している
EDIT#2:この問題は沈静化しているようだ、私は今、少なくとも数週間の時間であなたがobserveSingleEvent
を呼び出していることを私は賭ける
なぜ* callback(false)*または* callback(true)*なのではありません。また、データベースに書き込むことができないと述べています。データは最終的に書かれますか?あなたの書き込み関数にエラーハンドラを含めて、エラーがあればそれを確認していますか? – Jay
私のViewControllerへのコールバックは、ユーザーが存在しない場合に応じてtrueまたはfalseで行い、ViewControllerが次に表示するビューを決定します。私はエラーハンドラをインクルードしましたが、決して呼び出されません。私はこれがiPhone Simulatorでは動作しているが、実際のデバイスでは動作していないことに気付きました。 – MikeG
同じ問題が発生しましたが、これを引き起こしているのは分かりましたか? – Nilsymbol