没有调用Observer的完成处理程序,如何检入代码

时间:2017-08-14 06:14:37

标签: swift authentication firebase

我使用Firebase和Swift,用于Instagram的自定义身份验证。

我现在遇到这个问题,Remove a user through dashboard, but the user is still logged in?

当我启动应用程序时,我有这个监听器:

Auth.auth().addStateDidChangeListener {

我正在设置一个观察者:

ref.child("users/\(user.uid)").observe(.value, with: { (snapshot) in
        print(snapshot)
        ..........
    }, withCancel: { error in
        print(error)
    })

withwithCancel处理程序未执行,因为用户的令牌不再存在。 (非常奇怪的IMO,甚至withCancel都没有执行)。

我必须在代码中捕获这种情况,强制注销,如帖子所述:

  

检查您是否可以阅读您的用户区域,如果没有任何内容,请强行注销。

1 个答案:

答案 0 :(得分:0)

我最终向Firebase报告了错误报告。 我会发布回复,因为它可能在将来帮助某人。

来自Firebase的人回应了这个,

  

您所描述的行为是设计目的。用户   即使您已从中删除用户,会话也会无限期地持续存在   应用程序。为了帮助您解决这个问题,您可以查看   以下可能为您提供更多信息的StackOverflow帖子   如何处理这一个。

     

更多相关内容,我坚持使用取消阻止,为什么它没有执行:

我没有强调为什么没有调用withCancel完成处理程序。 从这个:

 ref.child("users/\(user.uid)").observe(.value, with: { (snapshot) in 
     print(snapshot) 
     .......... 
     }, withCancel: { error in 
        print(error)  
     }) 

当我在两个打印件上放置断点时,应用程序不会停止。因此,即使withCancel也未被调用。

答案:

  

转到withCancel完成处理程序查询,请允许我   在这里给你一些信息。如果是,则调用取消块   客户端未经身份验证,不再有权接收   事件。另外,还值得一提的是取消块   在离线模式下不会调用,因为Firebase可以正常工作   在这种情况下。您可以进一步查看我们的文档   的信息。