Detecta cierto error de Firebase en iOS que no funciona
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
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.
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.
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.