Detecta cierto error de Firebase en iOS que no funciona

Sep 09 2020

Pregunta actualizada

Estoy tratando de verificar manualmente si el usuario tiene que volver a autenticarse o no. Esto es lo que se me ocurrió:

    //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)
        }
    }
}

Pero esto nunca pasa por el .userTokenExpiredcaso, incluso cuando debería ... ¿Qué me estoy perdiendo aquí?

Respuestas

Meep Sep 17 2020 at 20:55

Si necesita verificar si el usuario está autenticado, es lo mismo que la reautenticación. Firebase hará su trabajo para hacer algunos niveles inferiores como tokens, etc. No tenemos que preocuparnos por eso.

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

si desea actualizar la dirección de correo electrónico en el usuario, la lógica debe ser

compruebe si el usuario no es nulo, luego actualice la dirección de correo electrónico.

Si es nulo, inicie sesión (flujo de trabajo anónimo o regular para iniciar sesión), luego actualice la dirección de correo electrónico.

Utilizo esta lógica similar para verificar si el usuario ha iniciado sesión y luego hago algo. De lo contrario, inicie sesión como anónimo y luego haga lo mismo.

2 FrankvanPuffelen Sep 10 2020 at 20:06

No hay una API en Firebase Authentication que regrese cuando el usuario se autenticó por última vez o si fue recientemente. La única funcionalidad incorporada es que Firebase verifica automáticamente la autenticación reciente para ciertas operaciones sensibles, pero eso parece no ser de utilidad para usted aquí.

Pero dado que su aplicación está haciendo llamadas a la API cuando el usuario se autentica, también puede registrar la hora en que lo hacen y luego verificar si fue lo suficientemente reciente para su caso de uso.

Chris Sep 23 2020 at 21:22

El problema era bastante simple: cogí mal error:

El error que tengo que detectar en mi caso es .requiresRecentLogin. Con eso, todo está funcionando bien.