Administrar usuarios en Firebase

Crear un usuario

Puedes crear un nuevo usuario en tu proyecto de Firebase llamando al método CreateUserWithEmailAndPassword o iniciando sesión como usuario por primera vez usando un proveedor de identidad federado, como Google Sign-In o Facebook Login .

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

Obtener el usuario actualmente registrado

La forma recomendada de obtener el usuario actual es configurando un oyente en el objeto de autenticación:

Firebase.Auth.FirebaseAuth auth;
Firebase.Auth.FirebaseUser user;

// Handle initialization of the necessary firebase modules:
void InitializeFirebase() {
  Debug.Log("Setting up Firebase Auth");
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  AuthStateChanged(this, null);
}

// Track state changes of the auth object.
void AuthStateChanged(object sender, System.EventArgs eventArgs) {
  if (auth.CurrentUser != user) {
    bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
    if (!signedIn && user != null) {
      Debug.Log("Signed out " + user.UserId);
    }
    user = auth.CurrentUser;
    if (signedIn) {
      Debug.Log("Signed in " + user.UserId);
    }
  }
}

// Handle removing subscription and reference to the Auth instance.
// Automatically called by a Monobehaviour after Destroy is called on it.
void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

Al utilizar un detector, se asegura de que el objeto de autenticación no esté en un estado intermedio (como la inicialización) cuando obtiene el usuario actual.

También puede obtener el usuario que ha iniciado sesión actualmente llamando CurrentUser . Si un usuario no ha iniciado sesión, CurrentUser devolverá nulo. Si un usuario cierra sesión, IsValid() del usuario devolverá falso.

Conservar la credencial de un usuario

Las credenciales del usuario se almacenarán en el almacén de claves local después de que el usuario inicie sesión. La caché local de las credenciales del usuario se puede eliminar al cerrar la sesión del usuario. El almacén de claves es específico de la plataforma:

Obtener el perfil de un usuario

Para obtener la información del perfil de un usuario, use los métodos de acceso de una instancia de Firebase.Auth.FirebaseUser . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  string name = user.DisplayName;
  string email = user.Email;
  System.Uri photo_url = user.PhotoUrl;
  // The user's Id, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server, if you
  // have one; use User.TokenAsync() instead.
  string uid = user.UserId;
}

Obtener la información de perfil específica del proveedor de un usuario

Para obtener la información del perfil recuperada de los proveedores de inicio de sesión vinculados a un usuario, utilice el método ProviderData . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  foreach (var profile in user.ProviderData) {
    // Id of the provider (ex: google.com)
    string providerId = profile.ProviderId;

    // UID specific to the provider
    string uid = profile.UserId;

    // Name, email address, and profile photo Url
    string name = profile.DisplayName;
    string email = profile.Email;
    System.Uri photoUrl = profile.PhotoUrl;
  }
}

Actualizar el perfil de un usuario

Puede actualizar la información básica del perfil de un usuario (el nombre para mostrar del usuario y la URL de la foto del perfil) con el método UpdateUserProfile . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  Firebase.Auth.UserProfile profile = new Firebase.Auth.UserProfile {
    DisplayName = "Jane Q. User",
    PhotoUrl = new System.Uri("https://example.com/jane-q-user/profile.jpg"),
  };
  user.UpdateUserProfileAsync(profile).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdateUserProfileAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdateUserProfileAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User profile updated successfully.");
  });
}

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

Puede configurar la dirección de correo electrónico de un usuario con el método UpdateEmail . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.UpdateEmailAsync("user@example.com").ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdateEmailAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdateEmailAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User email updated successfully.");
  });
}

Enviar a un usuario un correo electrónico de verificación

Puede enviar un correo electrónico de verificación de dirección a un usuario con el método SendEmailVerification . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.SendEmailVerificationAsync().ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("SendEmailVerificationAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("SendEmailVerificationAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Email sent successfully.");
  });
}

Puede personalizar la plantilla de correo electrónico que se utiliza en la sección Autenticación de Firebase console , en la página Plantillas de correo electrónico. Consulte Plantillas de correo electrónico en el Centro de ayuda de Firebase.

Establecer la contraseña de un usuario

Puede establecer la contraseña de un usuario con el método UpdatePassword . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
string newPassword = "SOME-SECURE-PASSWORD";
if (user != null) {
  user.UpdatePasswordAsync(newPassword).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdatePasswordAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdatePasswordAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Password updated successfully.");
  });
}

Enviar un correo electrónico para restablecer la contraseña

Puede enviar un correo electrónico de restablecimiento de contraseña a un usuario con el método SendPasswordResetEmail . Por ejemplo:

string emailAddress = "user@example.com";
if (user != null) {
  auth.SendPasswordResetEmailAsync(emailAddress).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("SendPasswordResetEmailAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("SendPasswordResetEmailAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Password reset email sent successfully.");
  });
}

Puede personalizar la plantilla de correo electrónico que se utiliza en la sección Autenticación de Firebase console , en la página Plantillas de correo electrónico. Consulte Plantillas de correo electrónico en el Centro de ayuda de Firebase.

También puede enviar correos electrónicos para restablecer la contraseña desde Firebase console.

Eliminar un usuario

Puede eliminar una cuenta de usuario con el método Delete . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.DeleteAsync().ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("DeleteAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("DeleteAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User deleted successfully.");
  });
}

También puedes eliminar usuarios desde la sección Autenticación de Firebase console , en la página Usuarios.

Volver a autenticar a un usuario

Algunas acciones sensibles a la seguridad, como eliminar una cuenta , configurar una dirección de correo electrónico principal y cambiar una contraseña , requieren que el usuario haya iniciado sesión recientemente. Si realiza una de estas acciones y el usuario inició sesión hace demasiado tiempo, el la acción falla.

Cuando esto suceda, vuelva a autenticar al usuario obteniendo nuevas credenciales de inicio de sesión del usuario y pasándolas a Reauthenticate . Por ejemplo:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
Firebase.Auth.Credential credential =
    Firebase.Auth.EmailAuthProvider.GetCredential("user@example.com", "password1234");

if (user != null) {
  user.ReauthenticateAsync(credential).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("ReauthenticateAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("ReauthenticateAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User reauthenticated successfully.");
  });
}

Importar cuentas de usuario

Puedes importar cuentas de usuario desde un archivo a tu proyecto de Firebase usando el comando auth:import Firebase CLI. Por ejemplo:

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