我将如何检测用户在Firebase中是否仍然有身份验证会话?

时间:2018-10-07 03:03:35

标签: ios swift firebase firebase-authentication

我能够找到以下内容:How to check if user has valid Auth Session Firebase iOS?,但是它无法回答我的问题。

我要做什么:我知道除非用户删除自己的帐户,否则这种情况永远不会发生,但是我是否知道用户是否还有身份验证会话?

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

在AppDelegate.swift中:

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

在我的主视图控制器中:

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(我能够打印它进行检查)。

它唯一检测到何时应退出但又不重新登录的时间是当我手动单击“退出”按钮时。有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

看看这个:https://firebase.google.com/docs/auth/ios/manage-users#re-authenticate_a_user

我不是IOS开发人员,但是从我从文档中读取的内容来看,您的代码中可能似乎缺少某些东西,并且对于WillB在How can I detect if the user was deleted from Firebase auth?所指出的Stackoverflow答案中看起来确实很熟悉。

答案 1 :(得分:0)

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

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

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

希望有帮助。

答案 2 :(得分:0)

您想用 AppDelegate 中的代码做什么?当然,如果 currentUsernil,那么您已经退出,这意味着此代码将永远不会执行任何操作?

如果这是为了测试目的,而您只是想测试listener,那么您需要先登录才能退出,IE 在 AppDelegate 中将其更改为 if Auth.auth().currentUser != nil