【问题标题】:Users phoneNumber property is nil after restart重启后用户 phoneNumber 属性为零
【发布时间】:2026-02-07 15:30:02
【问题描述】:

当我使用电话提供商通过 firebase-auth 验证用户时,在验证成功后,当前用户的属性 phoneNumber 填充了已验证的号码。

但是,在应用重新启动后,该属性保持为空。我仍然可以通过 providerData 属性获取电话号码,但我想知道为什么不再归档 phoneNumber 属性。

这是一个错误还是我遗漏了什么?

代码示例:

var phoneNumber: String? {
    get {
        guard let firUser = firUser else { return nil }
        var phoneNumber: String? = firUser.phoneNumber //filled after verification, but empty after restart
        if phoneNumber == nil {
            for userInfo in firUser.providerData {
                if userInfo.providerID == "phone" {
                    phoneNumber = userInfo.phoneNumber //always filled
                }
            }
        }
        return phoneNumber
    }
}

firUser 是我从 Auth.auth().currentUser 获得的当前用户

【问题讨论】:

  • 显示一些您尝试从 firebase 获取属性 phoneNumber 的代码。
  • 我添加了一个实际运行良好的代码示例。只是这种行为对我来说很奇怪。

标签: ios swift firebase firebase-authentication


【解决方案1】:

userInfo.phoneNumber 不存在,您需要检查:userInfo.uidfirUser.phoneNumber

【讨论】:

【解决方案2】:

我也面临类似的情况,用户登录时会填充 UserInfo 中的 phoneNumber 属性,但在应用重新启动时它为 nil。要回答您的具体问题,是的,这是一个错误。

在 17 年 6 月,Firebase 存在一个未解决的问题 #67“电话身份验证用户的行为不符合预期 #67”。它现在已关闭,但由于我仍然看到相同的问题,所以我假设它没有修复。 https://github.com/firebase/firebase-ios-sdk/issues/67

其中一位贡献者提供了另一种解决方案,即从 provideData 对象中获取 让 phoneNumber = Auth.auth().currentUser!.providerData.first!.phoneNumber!

以上代码假设只有一个提供者链接到用户。

【讨论】: