我正在構建一個涉及用戶的Firebase項目。即使從Firebase身份驗證部分刪除了用戶,用戶仍然能夠訪問該應用程序,並仍具有對數據庫的讀/寫權限,但存在已知的Firebase錯誤。我相信它與Firebase存儲在用戶設備上的令牌有關。零星地返回Firebase數據
作爲一個解決這個問題的方法,我實現了一個「用戶檢查」,我的應用程序將檢查我的實時數據庫中是否存在登錄用戶的用戶ID。這樣我所要做的就是從實時數據庫中刪除用戶標識節點,這將導致此檢查失敗,從而永久登錄用戶。
我遇到的問題是撥打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規則已設置爲「公開」,以便任何人都可以讀/寫。而且我的設備上有一個可以正常工作的網絡連接
編輯:一切工作正常在模擬器上。問題只發生在實際設備上
編輯#2:這個問題似乎已經平息了,我還沒有發現它現在至少幾個星期
出於好奇,爲什麼* callback(false)*或* callback(true)*。你也說你無法寫入數據庫。數據是否最終被寫入?你是否在寫函數中包含一個錯誤處理程序來查看錯誤是什麼,如果有的話? – Jay
回調到我的ViewController與true或false取決於不是不存在用戶,然後將確定ViewController下一個應該呈現的視圖。我已經包含了一個錯誤處理程序,但它從未被調用過。我注意到這一直在iPhone模擬器上工作,但不是實際的設備。 – MikeG
遇到同樣的問題,你找出是什麼原因造成的? – Nilsymbol