ios - 我如何才能检测到用户是否仍然在 firebase 中有一个身份验证 session ?

标签 ios swift firebase firebase-authentication

我找到了这个:How to check if user has valid Auth Session Firebase iOS? , 但它无法回答我的问题。

我正在尝试做的事情:我知道除非用户删除他们自己的帐户,否则这永远不会发生,但我能知道用户是否还有身份验证 session 吗?

例如,在身份验证选项卡下,我删除了测试用户创建的条目,即使我使用了这些代码片段:

在 AppDelegate.swift 中:

if Auth.auth().currentUser == nil {
        try! Auth.auth().signOut()
}

在我的主视图 Controller 中:

private func checkIfSignedIn() {
    Auth.auth().addStateDidChangeListener { (auth, user) in
        if user != nil {
            // code to stay signed in
        } else {
            // code for dismissing the controller and moving to login controller
        }
    }
}

当我运行从 firebase 控制台的身份验证部分删除条目并重新运行该应用程序时,用户仍然登录并且仍然具有有效的 UID(我能够打印它以进行检查)。

它唯一一次检测到何时应该注销并且不再重新登录是在我手动单击注销按钮时。有办法解决这个问题吗?

最佳答案

您没有调用 StateDidChangeListener。相反,您是在告诉 Firebase 在身份验证状态更改时给您打电话,这可能会在重新加载页面时发生几次。

当加载页面并且之前有用户登录时,身份验证状态可能会更改几次,同时客户端正在确定用户的身份验证状态是否仍然有效。如果您已经登录,Auth.auth().currentUser 将始终返回有效用户。因此请使用它。

private func checkIfSignedIn() {
   if Auth.auth().currentUser != nil {
      // code to stay signed in
   }else{
      // redirect to sign in page
   }
}

希望对您有所帮助。

关于ios - 我如何才能检测到用户是否仍然在 firebase 中有一个身份验证 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52685106/

相关文章:

ios - xcode 4.2 与 ios6 不兼容

ios - 使用 UITableViewCell 检测触摸并按住,我有哪些选择?

ios - UITableviewCell textLabel在iOS7中不可见

ios - 方法在操作中复制数组中的项目

ios - 谷歌分析实时不工作

objective-c - 是否可以在 objective-c 中使用 YouTubePlayer-Swift?

ios - 如何创建与 Alamofire 一起使用的 NTLM 身份验证 header ?

swift - Swift 中的多个动画过渡

android - 如何在登录后将新用户数据保存到 Firebase 实时数据库

android - 如何从 Firebase 数据库中检索不同的项目?