我正在使用涉及用户的Firebase构建项目。有一个已知的Firebase错误,即使用户从Firebase身份验证部分删除后,用户仍然可以访问该应用程序并仍具有对数据库的读/写权限。我认为这与Firebase在用户设备上存储的令牌有关。
作为一项解决方法,我实施了一个“用户检查”,我的应用程序将检查我的实时数据库中是否存在登录用户的用户ID。这样我所要做的就是从实时数据库中删除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规则已设置为“公开”,因此任何人都可以读/写。我的设备上有一个可用的互联网连接
编辑:模拟器上的一切正常。问题仅发生在实际设备上编辑#2:这个问题似乎已经消退,我至少在几周内没有注意到它