Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Kelola Pengguna di Firebase

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Buat pengguna

Anda membuat pengguna baru di proyek Firebase dengan memanggil metode CreateUserWithEmailAndPassword atau dengan memasukkan pengguna untuk pertama kalinya menggunakan penyedia identitas gabungan, seperti Google Sign-In atau Facebook Login .

Anda juga dapat membuat pengguna baru yang diautentikasi dengan sandi dari bagian Otentikasi di Firebase console , di halaman Pengguna.

Dapatkan pengguna yang saat ini masuk

Cara yang disarankan untuk mendapatkan pengguna saat ini adalah dengan menyetel listener pada objek Auth:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user->uid().c_str());
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};
// ... initialization code
// Test notification on registration.
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Dengan menggunakan listener, Anda memastikan bahwa objek Auth tidak dalam status perantara—seperti inisialisasi—saat Anda mendapatkan pengguna saat ini.

Anda juga bisa mendapatkan pengguna yang saat ini masuk dengan memanggil current_user . Jika pengguna tidak masuk, current_user mengembalikan nullptr.

Pertahankan kredensial pengguna

Kredensial pengguna akan disimpan di keystore lokal setelah pengguna masuk. Cache lokal kredensial pengguna dapat dihapus dengan mengeluarkan pengguna. Keystore adalah khusus platform:

Dapatkan profil pengguna

Untuk mendapatkan informasi profil pengguna, gunakan metode pengakses dari instance firebase::auth::User . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  std::string name = user->display_name();
  std::string email = user->email();
  std::string photo_url = user->photo_url();
  // 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 firebase::auth::User::Token() instead.
  std::string uid = user->uid();
}

Dapatkan informasi profil khusus penyedia pengguna

Untuk mendapatkan informasi profil yang diambil dari penyedia login yang ditautkan ke pengguna, gunakan metode ProviderData . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  for (auto it = user->provider_data().begin();
       it != user->provider_data().end(); ++it) {
    firebase::auth::UserInfoInterface* profile = *it;
    // Id of the provider (ex: google.com)
    std::string providerId = profile->provider_id();

    // UID specific to the provider
    std::string uid = profile->uid();

    // Name, email address, and profile photo Url
    std::string name = profile->display_name();
    std::string email = profile->email();
    std::string photoUrl = profile->photo_url();
  }
}

Perbarui profil pengguna

Anda dapat memperbarui informasi profil dasar pengguna—nama tampilan dan URL foto profil pengguna—dengan metode UpdateUserProfile . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  firebase::auth::User::UserProfile profile;
  profile.display_name = "Jane Q. User";
  profile.photo_url = "https://example.com/jane-q-user/profile.jpg";
  user->UpdateUserProfile(profile).OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("User profile updated.");
        }
      },
      nullptr);  // pass user_data here.
}

Setel alamat email pengguna

Anda dapat mengatur alamat email pengguna dengan metode UpdateEmail . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->UpdateEmail("user@example.com")
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("User email address updated.");
            }
          },
          nullptr);
}

Kirim email verifikasi kepada pengguna

Anda dapat mengirim email verifikasi alamat ke pengguna dengan metode SendEmailVerification . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->SendEmailVerification().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("Email sent.");
        }
      },
      nullptr);
}

Anda dapat menyesuaikan template email yang digunakan di bagian Otentikasi di Firebase console , di halaman Template Email. Lihat Template Email di Pusat Bantuan Firebase.

Setel kata sandi pengguna

Anda dapat mengatur kata sandi pengguna dengan metode UpdatePassword . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
std::string newPassword = "SOME-SECURE-PASSWORD";

if (user != nullptr) {
  user->UpdatePassword(newPassword.c_str())
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("password updated.");
            }
          },
          nullptr);
}

Kirim email pengaturan ulang kata sandi

Anda dapat mengirim email pengaturan ulang kata sandi ke pengguna dengan metode SendPasswordResetEmail . Sebagai contoh:

std::string emailAddress = "user@example.com";

auth->SendPasswordResetEmail(emailAddress.c_str())
    .OnCompletion(
        [](const firebase::Future<void>& completed_future,
           void* user_data) {
          // We are probably in a different thread right now.
          if (completed_future.error() == 0) {
            // Email sent.
          } else {
            // An error happened.
            printf("Error %d: %s", completed_future.error(),
                   completed_future.error_message());
          }
        },
        nullptr);

Anda dapat menyesuaikan template email yang digunakan di bagian Otentikasi di Firebase console , di halaman Template Email. Lihat Template Email di Pusat Bantuan Firebase.

Anda juga dapat mengirim email penyetelan ulang sandi dari Firebase console.

Hapus pengguna

Anda dapat menghapus akun pengguna dengan metode Delete . Sebagai contoh:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->Delete().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        if (completed_future.error() == 0) {
          // User deleted.
        } else {
          // An error happened.
          printf("Error %d: %s", completed_future.error(),
                 completed_future.error_message());
        }
      },
      nullptr);
}

Anda juga dapat menghapus pengguna dari bagian Otentikasi di Firebase console , di halaman Pengguna.

Mengautentikasi ulang pengguna

Beberapa tindakan sensitif keamanan—seperti menghapus akun , menyetel alamat email utama , dan mengubah sandi —mengharuskan pengguna baru saja masuk. Jika Anda melakukan salah satu tindakan ini, dan pengguna masuk terlalu lama, tindakan gagal.

Jika ini terjadi, autentikasi ulang pengguna dengan mendapatkan kredensial masuk baru dari pengguna dan meneruskan kredensial ke Reauthenticate . Sebagai contoh:

firebase::auth::User* user = auth->current_user();

// 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 != nullptr) {
  user->Reauthenticate(credential)
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            if (completed_future.error() == 0) {
              printf("User re-authenticated.");
            }
          },
          nullptr);
}

Impor akun pengguna

Anda dapat mengimpor akun pengguna dari file ke proyek Firebase Anda dengan menggunakan perintah auth:import dari Firebase CLI. Sebagai contoh:

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