【问题标题】:Catch certain Firebase Error in iOS not working在 iOS 中捕获某些 Firebase 错误无法正常工作
【发布时间】:2020-09-09 09:27:55
【问题描述】:

更新问题

我正在尝试手动检查是否必须重新验证用户身份。这是我想出的:

    //MARK: updateEmail
static func updateEmail(email: String, finished: @escaping (_ done: Bool, _ hasToReauthenticate: Bool) -> Void) {
    let currentUser = Auth.auth().currentUser
    currentUser?.updateEmail(to: email) { err in
        if err != nil {
            if let errCode = AuthErrorCode(rawValue: err!._code) {
                switch errCode {
                case .userTokenExpired:
                    print("expired")
                    finished(true, true)
                    break
                default:
                    Utilities.showErrorPopUp(labelContent: "Fehler", description: err!.localizedDescription)
                    finished(false, false)
                }
            }
        } else {
            finished(true, false)
        }
    }
}

但这永远不会通过.userTokenExpired 案例,即使它应该..我在这里错过了什么?

【问题讨论】:

  • 这样的 API 不存在。你期望它做什么?你会在哪里使用这个 API?是什么阻止您在应用程序代码中实现它?
  • @FrankvanPuffelen 我将如何实现它?:D 在我的应用程序中,用户可以编辑/删除其个人资料。只有当他真的需要重新认证时,我才想用登录视图提示用户
  • 我想到了一个解决方法,我检查错误消息并根据它继续,但我真的不知道我该怎么做
  • Firebase 身份验证中没有返回用户上次身份验证时返回的 API,或者是否是最近。但是由于您的应用程序在用户进行身份验证时进行 API 调用,因此您还可以记录他们这样做的时间,然后检查这对于您的用例来说是否足够新。
  • @FrankvanPuffelen 什么是最近

标签: ios swift firebase firebase-authentication


【解决方案1】:

Firebase 身份验证中没有返回用户上次身份验证时返回的 API,或者无论是最近的身份验证。唯一的内置功能是 Firebase 会自动检查某些敏感操作的最近身份验证,但这似乎对您没有用处。

但由于您的应用程序在用户进行身份验证时进行 API 调用,您还可以记录他们这样做的时间,然后检查这对于您的用例来说是否足够新。

【讨论】:

  • 感谢您的回答。就像我在 cmets 中已经问过的,什么是 recent enough
  • 那么检查错误的想法呢?有没有办法做到这一点?
  • 我想我找到了一些东西.. 稍后再试:我可以检查一下error:case .userTokenExpired:
  • 确定的“最近”还不够吗?也许我们在这里处理的是XY problem,因为我很难理解你想用这段代码完成什么。
  • 我认为 Firebase 决定了用户必须在什么时间之后重新进行身份验证?
【解决方案2】:

如果您需要检查用户是否已通过身份验证 - 与重新身份验证相同。 Firebase 会做一些较低级别的工作,例如令牌等。我们不必担心。

guard let currentUser = Auth.auth().currentUser else {
 //authenicate the user.
}

如果你想更新用户中的电子邮件地址,逻辑应该是

检查用户是否不为零,然后更新电子邮件地址。

如果为 nil,则登录(匿名或常规工作流程登录),然后更新电子邮件地址。

我使用这个类似的逻辑来检查用户是否登录,然后做一些事情。否则,请以匿名身份登录,然后执行相同操作。

【讨论】:

    【解决方案3】:

    问题很简单:我抓错了error

    在我的情况下我必须捕获的错误是 .requiresRecentLogin 。这样,一切正常。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2018-06-19
      • 2022-08-03
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多