gpt4 book ai didi

ios - 使用 Firebase 3 和 Swift 注销用户仍然显示 `currentUser`

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:24 25 4
gpt4 key购买 nike

我正尝试在我的 iOS 应用程序中使用 Firebase 3 注销用户。这是我的代码:

do {

databaseReference.child("Users").child(CUUID!).removeAllObservers()

try FIRAuth.auth()?.signOut()

print("FIRUSER - \(FIRAuth.auth()?.currentUser)")

self.performSegueWithIdentifier("logOutSegue", sender: self)

} catch let logOutError {

print("Error Logging User Out - \(logOutError)")
}

我想做的是,如果用户成功注销,则继续返回登录屏幕。为了检查用户是否已注销,我打印 currentUser 以查看是否还有用户。我点击了 logOut 按钮,segue 开始工作(没有捕获 -> 没有错误),但是当 print("FIRUSER -\(FIRAuth.auth()?.currentUser)") 代码运行,我仍然得到一个 currentUser。 为什么用户没有被注销?

最佳答案

try FIRAuth.auth()?.signOut()signOut() 上使用 cmd+click,您将被引导到它的文档,在那里你会看到


  • @param listener The block to be invoked. The block is always invoked asynchronously on the main thread, even for it's initial invocation after having been added as a listener.

  • @remarks The block is invoked immediately after adding it according to it's standard invocation semantics, asynchronously on the main thread.


异步 这意味着您注销用户的查询被加载到网络链接中的单独线程中,这需要时间(可能只有几毫秒,但仍然......)和您的 print 行甚至在用户注销之前就执行了。这就是为什么您仍然从 firebase 收到 currentUser 的原因...:)

尝试在执行 segue 后迁移到的类的 viewWillAppear(animated:Bool) 中打印 currentUser,如果它退出时没有捕获任何错误,打印行必须显示为零。

PS:- 假设 如果 signOut() 函数有一个 completionBlock: ,并且您尝试在那里打印 currentUser ,您可能会发现 nil,并可能使您的应用程序崩溃……同样,这只是假设

顺便说一句:- 获取当前用户的最佳方式是在 Auth 对象上设置一个监听器

  FIRAuth.auth()?.addAuthStateDidChangeListener { auth, user in
if let user = user {
// User is signed in.
} else {
// No user is signed in.
}
}

Firebase 文档:- Get Current User - Firebase Docs

关于ios - 使用 Firebase 3 和 Swift 注销用户仍然显示 `currentUser`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com