Maneja errores de autenticación de Firebase en plataformas de Apple

Si la devolución de llamada de finalización en métodos de Authentication recibe un argumento NSError que no es nulo, significa que hubo un problema. Para realizar el envío a la lógica de manejo correspondiente en tu código de producción, usa el código de error para averiguar si es uno de los errores comunes o específicos de métodos que se mencionan a continuación.

Algunos errores pueden resolverse a través de acciones específicas de los usuarios. Por ejemplo, para resolver FIRAuthErrorCodeUserTokenExpired se debe volver a acceder y para resolver FIRAuthErrorCodeWrongPassword se debe solicitar al usuario que proporcione la contraseña correcta.

Excepto por FIRAuthErrorCodeNetworkError o FIRAuthErrorCodeTooManyRequests, reintentar una operación fallida con los mismos argumentos producirá un error. No asumas que las operaciones en cuestión han tenido o no algún efecto en el servidor.

Cuando investigues o registres errores, revisa el diccionario userInfo. FIRAuthErrorNameKey contiene una string de nombre de error multiplataforma que se puede usar para identificar el error. NSLocalizedDescriptionKey contiene una descripción del error. Esta descripción se diseñó con el desarrollador en mente, no el usuario. NSUnderlyingErrorKey contiene el error subyacente que ocasionó el error, en los casos en que exista un error subyacente.

Además de los campos principales mencionados anteriormente, puede haber otros campos en el diccionario userInfo que pueden resultarte útiles al diagnosticar errores.

Códigos de error comunes para todos los métodos de API

Código Significado
FIRAuthErrorCodeNetworkError Indica que ocurrió un error de red durante la operación.
FIRAuthErrorCodeUserNotFound Indica que no se encontró la cuenta de usuario. Esto podría suceder si se eliminó la cuenta de usuario.
FIRAuthErrorCodeUserTokenExpired Indica que el token del usuario caducó. Por ejemplo, es posible que el usuario haya cambiado su contraseña en otro dispositivo. Debes indicarle al usuario que vuelva a acceder en este dispositivo.
FIRAuthErrorCodeTooManyRequests Indica que la solicitud se bloqueó después de la recepción de un número atípico de solicitudes realizadas a los servidores de Firebase Authentication desde el dispositivo emisor. Vuelve a intentarlo más tarde.
FIRAuthErrorCodeInvalidAPIKey Indica que la aplicación se configuró con una clave de API no válida.
FIRAuthErrorCodeAppNotAuthorized Indica que la app no está autorizada para usar Firebase Authentication con la clave de API proporcionada. Ve a la Consola de API de Google y revisa en la pestaña Credenciales que la clave de API que estás usando incluya el ID del paquete de tu aplicación en su lista blanca.
FIRAuthErrorCodeKeychainError Indica que ocurrió un error cuando se accedía al llavero. Los campos NSLocalizedFailureReasonErrorKey y NSUnderlyingErrorKey en el diccionario NSError.userInfo contendrán más información sobre el error.
FIRAuthErrorCodeInternalError Indica que se produjo un error interno. Informa este error con el objeto NSError completo.

Códigos de error específicos de métodos

FIRAuth

fetchProvidersForEmail:completion:

Código Significado
FIRAuthErrorCodeInvalidEmail Indica que la dirección de correo electrónico no tiene el formato correcto.

signInWithEmail:password:completion:

Código Significado
FIRAuthErrorCodeOperationNotAllowed Indica que las cuentas de correo electrónico y contraseña no están habilitadas. Habilítalas en la sección Auth de Firebase console.
FIRAuthErrorCodeInvalidEmail Indica que la dirección de correo electrónico no tiene el formato correcto.
FIRAuthErrorCodeUserDisabled Indica que la cuenta del usuario está inhabilitada.
FIRAuthErrorCodeWrongPassword El usuario intentó acceder con una contraseña incorrecta.

signInWithCredential:completion:

Código Significado
FIRAuthErrorCodeInvalidCredential Indica que la credencial que se ingresó no es válida. Por ejemplo, puede haberse vencido o tener un formato incorrecto.
FIRAuthErrorCodeInvalidEmail Indica que la dirección de correo electrónico no tiene el formato correcto, si el tipo de credencial es EmailPasswordAuthCredential.
FIRAuthErrorCodeOperationNotAllowed Indica que no se habilitaron las cuentas con proveedor de identidad representadas por la credencial. Habilítalas en la sección Auth de Firebase console.
FIRAuthErrorCodeEmailAlreadyInUse Indica que el correo electrónico aseverado por la credencial (p. ej., el correo electrónico de un token de acceso de Facebook) ya está siendo utilizado por otra cuenta y no se puede autenticar con este método de acceso. Llama a fetchProvidersForEmail para obtener el correo electrónico de este usuario y, luego, solicita que acceda con cualquiera de los proveedores de acceso mostrados. Este error solo aparecerá si se habilita la configuración “Una cuenta por dirección de correo electrónico” en Firebase console, en la sección Authentication.
FIRAuthErrorCodeUserDisabled Indica que la cuenta del usuario está inhabilitada.
FIRAuthErrorCodeWrongPassword Indica que el usuario intentó acceder con una contraseña incorrecta, si el tipo de credencial es EmailPasswordAuthCredential.

signInAnonymouslyWithCompletion:

Código Significado
FIRAuthErrorCodeOperationNotAllowed Indica que no están habilitadas las cuentas anónimas. Habilítalas en la sección Auth de Firebase console.

signInWithCustomToken:completion:

Código Significado
FIRAuthErrorCodeInvalidCustomToken Indica que ocurrió un error de validación con el token personalizado.
FIRAuthErrorCodeCustomTokenMismatch Indica que la cuenta de servicio y la clave de API pertenecen a proyectos diferentes.

createUserWithEmail:password:completion:

Código Significado
FIRAuthErrorCodeInvalidEmail Indica que la dirección de correo electrónico no tiene el formato correcto.
FIRAuthErrorCodeEmailAlreadyInUse Indica que el correo electrónico con el que se intentó acceder ya existe. Llama a fetchProvidersForEmail para verificar cuáles fueron los mecanismos con los que el usuario accedió anteriormente y solicítale que acceda con uno de ellos.
FIRAuthErrorCodeOperationNotAllowed Indica que las cuentas de correo electrónico y contraseña no están habilitadas. Habilita estas opciones en la sección Authentication de Firebase console.
FIRAuthErrorCodeWeakPassword Indica que se intentó configurar una contraseña poco segura. El campo NSLocalizedFailureReasonErrorKey en el objeto de diccionario NSError.userInfo contendrá una explicación más detallada que se puede mostrar al usuario.

signOut:

Código Significado
FIRAuthErrorCodeKeychainError Indica que ocurrió un error cuando se intentaba acceder al llavero. Los campos NSLocalizedFailureReasonErrorKey y NSUnderlyingErrorKey en el diccionario NSError.userInfo contendrán más información sobre el error.

FIRUser

Errores comunes para operaciones de FIRUser

Código Significado
FIRAuthErrorCodeInvalidUserToken Indica que el token de actualización del usuario activo, que contiene la información sobre la sesión, no es válido. Debes indicarle al usuario que vuelva a acceder en este dispositivo.
FIRAuthErrorCodeUserDisabled Indica que la cuenta del usuario está inhabilitada y que no se puede utilizar sino hasta que se habilite nuevamente en el panel Usuarios de Firebase console.

reauthenticateWithCredential:completion:

Código Significado
FIRAuthErrorCodeInvalidCredential Indica que la credencial que se ingresó no es válida. Por ejemplo, puede haberse vencido o tener un formato incorrecto.
FIRAuthErrorCodeInvalidEmail Indica que la dirección de correo electrónico no tiene el formato correcto, si el tipo de credencial es EmailPasswordAuthCredential.
FIRAuthErrorCodeWrongPassword Indica que el usuario intentó volver a autenticarse con una contraseña incorrecta, si el tipo de credencial es EmailPasswordAuthCredential.
FIRAuthErrorCodeUserMismatch Indica que un usuario distinto del usuario actual intentó reautenticarse.
FIRAuthErrorCodeOperationNotAllowed Indica que no se habilitaron las cuentas con proveedor de identidad representadas por la credencial. Habilítalas en la sección Auth de Firebase console.
FIRAuthErrorCodeEmailAlreadyInUse Indica que el correo electrónico que se declara en la credencial (p. ej., el correo electrónico de un token de acceso de Facebook) ya lo está usando otra cuenta y no se puede volver a autenticar con este método de acceso. Llama a fetchProvidersForEmail para obtener el correo electrónico de este usuario y, luego, solicita que acceda con cualquiera de los proveedores de acceso mostrados. Este error solo aparecerá si se habilita la configuración “Una cuenta por dirección de correo electrónico” en Firebase console, en la sección Authentication.
FIRAuthErrorCodeUserDisabled Indica que la cuenta del usuario está inhabilitada.

updateEmail:completion:

Código Significado
FIRAuthErrorCodeEmailAlreadyInUse Indica que existe otra cuenta que utiliza ese correo electrónico.
FIRAuthErrorCodeInvalidEmail Indica que la dirección de correo electrónico no tiene el formato correcto.
FIRAuthErrorCodeRequiresRecentLogin La actualización del correo electrónico de un usuario es una operación de seguridad que requiere que el usuario haya accedido recientemente. Este error indica que el acceso del usuario no ha sido suficientemente reciente. Para solucionar este problema, invoca a reauthenticateWithCredential:completion: en FIRUser a fin de volver a autenticar al usuario.

updatePassword:completion:

Código Significado
FIRAuthErrorCodeOperationNotAllowed Indica que el administrador inhabilitó el acceso con el proveedor de identidad especificado.
FIRAuthErrorCodeRequiresRecentLogin La actualización de la contraseña de un usuario es una operación de seguridad que requiere que el usuario haya accedido recientemente. Este error indica que el acceso del usuario no ha sido suficientemente reciente. Para solucionar este problema, invoca a reauthenticateWithCredential:completion: en FIRUser a fin de volver a autenticar al usuario.
FIRAuthErrorCodeWeakPassword Indica que se intentó configurar una contraseña poco segura. El campo NSLocalizedFailureReasonErrorKey en el objeto de diccionario NSError.userInfo contendrá una explicación más detallada que se puede mostrar al usuario.

linkWithCredential:completion:

Código Significado
FIRAuthErrorCodeProviderAlreadyLinked Indica que se intentó vincular a esta cuenta un proveedor de un tipo que ya está vinculado.
FIRAuthErrorCodeCredentialAlreadyInUse Indica que se intentó vincular con una credencial que ya se vinculó con otra cuenta de Firebase.
FIRAuthErrorCodeOperationNotAllowed Indica que no se habilitaron las cuentas con proveedor de identidad representadas por la credencial. Habilítalas en la sección Auth de Firebase console.

Este método también puede mostrar códigos de error asociados con updateEmail:completion: y updatePassword:completion: en FIRUser.

unlinkFromProvider:completion:

Código Significado
FIRAuthErrorCodeNoSuchProvider Indica que se intentó desvincular un proveedor que no está vinculado a la cuenta.
FIRAuthErrorCodeRequiresRecentLogin La actualización del correo electrónico es una operación de seguridad que requiere que el usuario haya accedido recientemente. Este error indica que el acceso del usuario no ha sido suficientemente reciente. Para solucionar este problema, invoca a reauthenticateWithCredential:completion: en FIRUser a fin de volver a autenticar al usuario.

sendEmailVerificationWithCompletion:

Código Significado
FIRAuthErrorCodeUserNotFound Indica que no se encontró la cuenta de usuario.

deleteWithCompletion:

Código Significado
FIRAuthErrorCodeRequiresRecentLogin La eliminación de la cuenta de un usuario es una operación de seguridad sensible que requiere que el usuario haya accedido recientemente. Este error indica que el acceso del usuario no ha sido suficientemente reciente. Para solucionar este problema, invoca a reauthenticateWithCredential:completion: en FIRUser a fin de volver a autenticar al usuario.