2016-10-25 56 views
2

我正在構建一個涉及用戶的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:這個問題似乎已經平息了,我還沒有發現它現在至少幾個星期

+0

出於好奇,爲什麼* callback(false)*或* callback(true)*。你也說你無法寫入數據庫。數據是否最終被寫入?你是否在寫函數中包含一個錯誤處理程序來查看錯誤是什麼,如果有的話? – Jay

+0

回調到我的ViewController與true或false取決於不是不存在用戶,然後將確定ViewController下一個應該呈現的視圖。我已經包含了一個錯誤處理程序,但它從未被調用過。我注意到這一直在iPhone模擬器上工作,但不是實際的設備。 – MikeG

+0

遇到同樣的問題,你找出是什麼原因造成的? – Nilsymbol

回答

0

我敢打賭,到時候您呼叫observeSingleEvent ,你註銷了,所以可能這就是爲什麼它沒有返回任何東西。