Firebase Auth Check即使在(肯定)不应该是一个用户的情况下也会返回用户

时间:2017-09-21 15:28:20

标签: swift firebase firebase-authentication

我正在检查是否存在用户会话并创建匿名帐户(如果没有

直到几天前才开始工作,但是在发布之前,我们进行了最终检查,现在用户检查返回了一个用户ID,即使不应该是一个用户ID。

应用程序已经新安装,但是usr永远不会是零 - 这正是我所期望的。每次卸载并重新安装时,用户ID都完全相同。 Firebase中未创建任何匿名用户。

故事中的另一个扭曲可能有助于诊断。它在模拟器上按预期工作......我最近一直在设置推送通知。

// Check if user is logged in, if not, create anonymous auth so users can access DB and storage w/o an account
    let checkAuth = Auth.auth().addStateDidChangeListener { auth, usr in
        if usr == nil {

            // No user is signed in.
            Auth.auth().signInAnonymously() { (usr, err) in
                if (err == nil) {
                    let uid = usr!.uid
                    print("Anon User ID \(uid)")
                } else {
                    print("Anon auth error \(String(describing: err!.localizedDescription))")
                }
            }
        } else {
            print("User ID \(usr!.uid) and provider \(usr!.providerID)")
        }
    }

    Auth.auth().removeStateDidChangeListener(checkAuth)        
    return true

1 个答案:

答案 0 :(得分:0)

Firebase可能会使用钥匙串来存储用户会话。钥匙串在模拟器和设备上的表现不同。因为它使用了钥匙串,所以存储的用户会话将在app卸载/重新安装后继续使用。

一个简单的修复:使用UserDefaults存储一个标志,该标志确定这是否是自安装以来该应用程序的首次运行。在AppDelegate中,查阅标记try? Auth.auth().signOut()并更新标记。