Autentica con Firebase de forma anónima

Puedes usar Firebase Authentication para crear y usar cuentas anónimas temporales a fin de autenticar con Firebase. Estas cuentas se pueden usar para permitir que los usuarios que aún no se hayan registrado en la app trabajen con datos protegidos mediante reglas de seguridad. Si un usuario anónimo decide registrarse para usar la app, puedes vincular sus credenciales de acceso con la cuenta anónima, de manera que pueda continuar usando sus datos protegidos en sesiones futuras.

Antes de comenzar

  1. Si aún no lo hiciste, sigue los pasos de la guía de introducción.

  2. Habilitar acceso anónimo:

    • En la sección Authentication de Firebase console, abre la página Sign-in method.
    • En la página Sign-in method, habilita el método Anónimo y haz clic en Guardar.

Autentica con Firebase de forma anónima

Cuando un usuario que no accedió a su cuenta usa una función de la app que requiere autenticación en Firebase, haz que el usuario acceda de forma anónima con una llamada a signInAnonymously():

try {
  final userCredential =
      await FirebaseAuth.instance.signInAnonymously();
  print("Signed in with temporary account.");
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "operation-not-allowed":
      print("Anonymous auth hasn't been enabled for this project.");
      break;
    default:
      print("Unknown error.");
  }
}

Convierte una cuenta anónima en una permanente

Cuando un usuario anónimo se registra en la app, tal vez sea conveniente permitirle que continúe su trabajo con su cuenta nueva. Por ejemplo, puede que desees hacer que los elementos que el usuario agregó a su carrito de compras antes de registrarse estén disponibles en el carrito de compras de su cuenta nueva. Para hacerlo, completa los siguientes pasos:

  1. Cuando se registre el usuario, completa el flujo de acceso del proveedor de autenticación del usuario hasta el paso anterior a llamar a uno de los métodos signInWith. Por ejemplo, obtén el token de ID de Google, el token de acceso a Facebook o la dirección de correo electrónico y contraseña del usuario.

  2. Obtén un objeto Credential para el proveedor de autenticación nuevo:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  3. Pasa el objeto Credential al método linkWithCredential() del usuario que accedió:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

Si la llamada a linkWithCredential() se realiza correctamente, la cuenta nueva del usuario puede acceder a los datos de Firebase de la cuenta anónima.

Próximos pasos

Cuando un usuario crea una cuenta nueva, esta se almacena como parte de tu proyecto de Firebase y se puede usar para identificar a un usuario en todas las apps del proyecto, sin importar el método de acceso que usó.

En tus apps, puedes obtener la información básica de perfil del usuario a partir del objeto User. Consulta Administrar usuarios.

En tus reglas de seguridad de Firebase Realtime Database y Cloud Storage, puedes obtener el ID del usuario único que accedió a partir de la variable auth y usarlo para controlar a qué datos podrá acceder.

Para permitir que los usuarios accedan a la app con varios proveedores de autenticación, puedes vincular las credenciales de estos proveedores con una cuenta de usuario existente.

Para salir de la sesión de un usuario, llama a signOut():

await FirebaseAuth.instance.signOut();