【问题标题】:Logging a user out with Firebase 3 and Swift still shows the `currentUser`使用 Firebase 3 和 Swift 注销用户仍会显示 `currentUser`
【发布时间】:2017-01-03 07:29:48
【问题描述】:

我正在尝试在我的 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 工作(没有catch -> 没有错误),但是当print("FIRUSER - \(FIRAuth.auth()?.currentUser)") 代码运行时,我仍然得到一个currentUser。 为什么用户没有退出?

【问题讨论】:

    标签: ios swift xcode firebase firebase-authentication


    【解决方案1】:

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


    • @param listener 要调用的块。 块总是在主线程上异步调用 线程,即使它是作为监听器添加后的初始调用。

    • @remarks 根据其标准调用添加块后立即调用该块 语义,在主线程上异步


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

    尝试在执行 segue 后迁移到的类的 viewWillAppear(animated:Bool) 中打印 currentUser,如果它在未捕获任何错误的情况下退出, 打印行必须显示 nil。

    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

    【讨论】:

    • 太棒了,谢谢!抱歉,我忘了点赞和接受!
    猜你喜欢
    • 2020-06-23
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多