【问题标题】:Why does the display name of my users keep reverting in Firebase with swift?为什么我的用户的显示名称不断在 Firebase 中快速还原?
【发布时间】:2021-09-14 15:17:55
【问题描述】:

我在我的 swift 项目中遇到以下错误:https://github.com/firebase/firebase-ios-sdk/issues/4393。为了克服这个问题,我将显示名称更改为用户电子邮件中 ​​@ 之前的字符,如下所示:

var displayName = user.email!
if let atRange = displayName.range(of: "@") {
    displayName.removeSubrange(atRange.lowerBound.. < displayName.endIndex)
}
if user.displayName!.count < 2{
    let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
    changeRequest?.displayName = displayName
    changeRequest?.commitChanges {(err) in
        if let err = err{
            print(err)
        }
    }
}

这在我第一次登录时有效,但如果我注销然后再次登录,显示名称将恢复为 Optional("")。为什么要这样做?

编辑

我创建了一个解决方法,我不仅在第一次创建用户时运行上述代码,而且在每次用户登录时,这似乎都过分了,显示名称不断被覆盖肯定是有原因的。

【问题讨论】:

    标签: swift firebase firebase-authentication firebaseui


    【解决方案1】:

    这不是错误,这是 Apple 方面的预期行为。默认情况下,您应该使用适当的显示名称更新 Firebase 用户,而不是依赖第 3 方信息,因为这些信息仅在首次登录时可用。

    只需检查名称在初始登录时是否存在并且长度超过 0 个字符,而不是 null 等。然后您可以使用以下内容更新名称:

    let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
    changeRequest?.displayName = displayName
    changeRequest?.commitChanges { (error) in
      // ...
    }
    

    这也记录在您发布的 git-issue https://github.com/firebase/firebase-ios-sdk/issues/4393#issuecomment-612193703

    最终,您是以 Firebase 用户而非 Apple 用户身份登录您的应用。 Apple 仅对流程进行身份验证,因此您必须尽可能更新 Firebase 用户,因为 Apple 在所有平台上都高度不一致。

    【讨论】:

    • 这不是我要问的。我知道我发布的 Github 链接中提到的问题。正如我在问题中所说,firebase 在更改用户的显示名称后将其还原为空白值。
    • 那么您应该在将名称发送到 Firebase 之前调试实际定义的名称,并确保您使用的是最新的主要版本的 Firebase。 Firebase 不会还原更改,除非请求格式不正确,否则它不会在意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2015-04-30
    • 2015-03-19
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多