swift - Firebase Auth Check 返回一个用户,即使那里(绝对)不应该是一个用户

标签 swift firebase firebase-authentication

我正在执行检查以查看是否存在用户 session ,如果没有则创建一个匿名帐户

这在几天前一直运行良好,但就在发布之前,我们进行了最后的检查,现在用户检查返回了一个用户 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

最佳答案

Firebase 可能使用钥匙串(keychain)来存储用户 session 。钥匙串(keychain)在模拟器和设备上的行为不同。因为它使用钥匙串(keychain),所以存储的用户 session 将在应用程序卸载/重新安装后继续存在。

一个简单的修复:使用 UserDefaults 存储一个标志,确定这是否是应用程序安装后的第一次运行。在你的 AppDelegate 中,查询标志,试试? Auth.auth().signOut() 并更新标志。

关于swift - Firebase Auth Check 返回一个用户,即使那里(绝对)不应该是一个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347829/

相关文章:

ios - 使用 MKPinAnnotationView 和 MKAnnotationView 更新用户位置

swift - 在解释响应之前,如何确保该函数完成?

android - 如何国际化来自 Firebase 的错误消息?

ios - Firebase Phone Auth reCAPTCHA 验证在某些设备上不起作用

firebase - Firebase Auth 的本地(持久身份验证状态)是否安全且不受浏览器的 XSS 和 CSRF 影响?

ios - 当前模态未正确调整 View 大小

ios - 具有协议(protocol)扩展的 Swift 通用未知成员

ios - Firebase Microsoft 登录无法在 Swift iOS 中获取访问 token

ios - 使用 Firebase 与企业数据库进行离线数据同步

android - 在 FirebaseUI 中更改 startActivityForResult 的布局