Administrar usuarios en Firebase

Crea un usuario

Existen cuatro maneras de crear un usuario nuevo en un proyecto de Firebase:

  • Llama al método createUserWithEmailAndPassword().
  • Permite que un usuario acceda por primera vez con un proveedor de identidad federada, como Acceso con Google, Acceso con Facebook o Apple.

También puedes crear nuevos usuarios autenticados con contraseña en la sección Authentication de Firebase console, en la página Usuarios.

Obtén el perfil de un usuario

Para obtener la información del perfil de un usuario, utiliza las propiedades de User. Existen tres maneras de obtener un objeto User para que represente al usuario actual:

  • Las transmisiones authStateChanges, idTokenChanges y userChanges: Los objetos de escucha recibirán los User actuales, o null si no se autenticó el usuario:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    Cuando se inicia la app, se activa un evento después de que se restablecen las credenciales del usuario (si las hay) del almacenamiento local, lo que significa que siempre se llama a los objetos de escucha cuando se inicializa el estado del usuario. Luego, cada vez que cambie el estado de autenticación, se generará un evento nuevo con el estado actualizado del usuario.

    Si escuchas el estado de autenticación, puedes compilar una interfaz de usuario que reaccione a estos cambios en el estado de autenticación.

  • El objeto UserCredential que muestra los métodos de autenticación (signIn-): El objeto UserCredential tiene una propiedad user con el User actual:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • La propiedad currentUser de la instancia de FirebaseAuth: Si estás seguro de que el usuario accedió, puedes acceder a User desde la propiedad currentUser:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser puede ser null por dos motivos:

    • El usuario no accedió.
    • No se terminó de inicializar el objeto Auth. Si usas un objeto de escucha para hacer un seguimiento del estado de acceso del usuario, no necesitas preocuparte por este caso.

Obtén la información de perfil de un usuario de un proveedor específico

Para obtener la información de perfil que se recuperó de los proveedores de acceso vinculados con un usuario, usa la propiedad providerData. Por ejemplo:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

Actualiza el perfil de un usuario

Puedes actualizar información básica del perfil de un usuario (su nombre visible y la URL de su foto de perfil) con el método update. Por ejemplo:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

Configura la dirección de correo electrónico de un usuario

Puedes configurar la dirección de correo electrónico de un usuario con el método updateEmail(). Por ejemplo:

await user?.updateEmail("janeq@example.com");

Envía un mensaje de verificación a un usuario

Para enviarle un mensaje de verificación de dirección a un usuario, puedes usar el método sendEmailVerification(). Por ejemplo:

await user?.sendEmailVerification();

Puedes personalizar la plantilla de correo electrónico que se usa en la sección Authentication de Firebase console, en la página Plantillas de correo electrónico. Consulta Plantillas de correo electrónico en el Centro de ayuda de Firebase.

También es posible pasar el estado a través de una URL de continuación para regresar a la app cuando se envía un mensaje de verificación.

Además, para localizar el mensaje de verificación, puedes actualizar el código de idioma en la instancia de Auth antes de enviarlo. Por ejemplo:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

Configura la contraseña de un usuario

Para configurar la contraseña de un usuario, puedes usar el método updatePassword(). Por ejemplo:

await user?.updatePassword(newPassword);

Envía un correo electrónico de restablecimiento de contraseña

Para enviar un correo electrónico de restablecimiento de contraseña a un usuario, puedes usar el método sendPasswordResetEmail(). Por ejemplo:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Puedes personalizar la plantilla de correo electrónico que se usa en la sección Authentication de Firebase console, en la página Plantillas de correo electrónico. Consulta Plantillas de correo electrónico en el Centro de ayuda de Firebase.

También es posible pasar el estado a través de una URL de continuación para regresar a la app cuando se envía un correo electrónico de restablecimiento de la contraseña.

Además, para localizar el correo electrónico de restablecimiento de la contraseña, puedes actualizar el código de idioma en la instancia de Auth antes de enviarlo. Por ejemplo:

await FirebaseAuth.instance.setLanguageCode("fr");

También puedes enviar correos electrónicos de restablecimiento de contraseña desde Firebase console.

Borra un usuario

Para borrar una cuenta de usuario, puedes usar el método delete(). Por ejemplo:

await user?.delete();

También puedes borrar usuarios en la sección Authentication de Firebase console, en la página Usuarios.

Vuelve a autenticar un usuario

Por motivos de seguridad, algunas acciones, como borrar una cuenta, configurar una dirección de correo electrónico principal y cambiar una contraseña, no pueden realizarse si el usuario no accedió a su cuenta recientemente. Si transcurrió demasiado tiempo desde que el usuario accedió a su cuenta, cualquier intento de realizar estas acciones fallará y se mostrará una FirebaseAuthException con el código requires-recent-login. Cuando esto sucede, debes volver a autenticar al usuario. Para ello, obtén credenciales de acceso nuevas del usuario y pásalas a reauthenticate. Por ejemplo:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

Importa cuentas de usuario

Para importar cuentas de usuario desde un archivo a tu proyecto de Firebase, puedes usar el comando auth:import de Firebase CLI. Por ejemplo:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14