Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Kelola Pengguna

Firebase Admin SDK menyediakan API untuk mengelola pengguna Firebase Authentication Anda dengan hak istimewa yang lebih tinggi. API manajemen pengguna admin memberi Anda kemampuan untuk menyelesaikan tugas-tugas berikut secara terprogram dari lingkungan server yang aman:

  • Buat pengguna baru tanpa pembatasan atau pembatasan tarif.
  • Cari pengguna dengan kriteria yang berbeda seperti uid, email atau nomor telepon.
  • Daftar semua pengguna proyek tertentu dalam batch.
  • Akses metadata pengguna termasuk tanggal pembuatan akun dan tanggal masuk terakhir.
  • Hapus pengguna tanpa memerlukan kata sandi mereka yang ada.
  • Perbarui properti pengguna - termasuk sandinya - tanpa harus masuk sebagai pengguna.
  • Verifikasi email tanpa harus melalui alur tindakan out-of-band untuk memverifikasi email.
  • Ubah email pengguna tanpa mengirim tautan email untuk mencabut perubahan ini.
  • Buat pengguna baru dengan nomor telepon tanpa harus melalui alur verifikasi SMS.
  • Mengubah nomor telepon pengguna tanpa harus melalui alur verifikasi SMS.
  • Penyediaan offline pengguna dalam keadaan dinonaktifkan dan kemudian mengontrol kapan harus mengaktifkannya.
  • Buat konsol pengguna khusus yang disesuaikan dengan sistem manajemen pengguna aplikasi tertentu.

Sebelum kamu memulai

Untuk menggunakan API pengelolaan pengguna yang disediakan oleh Firebase Admin SDK, Anda harus memiliki akun layanan. Ikuti petunjuk penyiapan untuk informasi selengkapnya tentang cara menginisialisasi Admin SDK.

Ambil data pengguna

Cara utama untuk mengidentifikasi pengguna adalah dengan uid mereka, pengidentifikasi unik untuk pengguna itu. Admin SDK menyediakan metode yang memungkinkan pengambilan informasi profil pengguna dengan uid mereka :

Node.js

getAuth()
  .getUser(uid)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Jawa

UserRecord userRecord = FirebaseAuth.getInstance().getUser(uid);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getUid());

Python

from firebase_admin import auth

user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))

Pergi

// Get an auth client from the firebase.App
client, err := app.Auth(ctx)
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

u, err := client.GetUser(ctx, uid)
if err != nil {
	log.Fatalf("error getting user %s: %v\n", uid, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

C#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

Metode ini mengembalikan objek UserRecord untuk pengguna yang sesuai dengan uid yang disediakan untuk metode tersebut.

Jika uid yang disediakan bukan milik pengguna yang sudah ada atau pengguna tidak dapat diambil karena alasan lain, metode di atas menimbulkan kesalahan. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan Admin Auth API .

Dalam beberapa kasus, Anda akan memiliki email pengguna alih-alih uid mereka. Firebase Admin SDK mendukung pencarian informasi pengguna dengan email:

Node.js

getAuth()
  .getUserByEmail(email)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Jawa

UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getEmail());

Python

from firebase_admin import auth

user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))

Pergi

u, err := client.GetUserByEmail(ctx, email)
if err != nil {
	log.Fatalf("error getting user by email %s: %v\n", email, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

C#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

Metode ini mengembalikan objek UserRecord untuk pengguna yang sesuai dengan email yang diberikan.

Jika email yang diberikan bukan milik pengguna yang sudah ada atau pengguna tidak dapat diambil karena alasan lain, Admin SDK akan menampilkan kesalahan. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Dalam kasus lain, Anda akan memiliki nomor telepon pengguna alih-alih uid mereka. Firebase Admin SDK mendukung pencarian informasi pengguna dengan nomor telepon:

Node.js

getAuth()
  .getUserByPhoneNumber(phoneNumber)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data:  ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Jawa

UserRecord userRecord = FirebaseAuth.getInstance().getUserByPhoneNumber(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getPhoneNumber());

Python

from firebase_admin import auth

user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))

Pergi

u, err := client.GetUserByPhoneNumber(ctx, phone)
if err != nil {
	log.Fatalf("error getting user by phone %s: %v\n", phone, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

C#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByPhoneNumberAsync(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

Metode ini mengembalikan objek UserRecord untuk pengguna yang sesuai dengan nomor telepon yang diberikan.

Jika nomor telepon yang diberikan bukan milik pengguna yang sudah ada atau pengguna tidak dapat diambil karena alasan lain, Admin SDK akan menampilkan kesalahan. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Ambil data pengguna secara massal

Firebase Admin SDK juga memungkinkan pengambilan daftar pengguna berdasarkan pengenal yang Anda berikan. Anda dapat mengidentifikasi pengguna berdasarkan ID pengguna, email, atau nomor telepon mereka. Maksimal 100 pengidentifikasi dapat diberikan dalam satu panggilan. Pengidentifikasi dapat berisi campuran jenis:

Node.js

getAuth()
  .getUsers([
    { uid: 'uid1' },
    { email: 'user2@example.com' },
    { phoneNumber: '+15555550003' },
    { providerId: 'google.com', providerUid: 'google_uid4' },
  ])
  .then((getUsersResult) => {
    console.log('Successfully fetched user data:');
    getUsersResult.users.forEach((userRecord) => {
      console.log(userRecord);
    });

    console.log('Unable to find users corresponding to these identifiers:');
    getUsersResult.notFound.forEach((userIdentifier) => {
      console.log(userIdentifier);
    });
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Jawa

GetUsersResult result = FirebaseAuth.getInstance().getUsersAsync(Arrays.asList(
    new UidIdentifier("uid1"),
    new EmailIdentifier("user2@example.com"),
    new PhoneIdentifier("+15555550003"),
    new ProviderIdentifier("google.com", "google_uid4"))).get();

System.out.println("Successfully fetched user data:");
for (UserRecord user : result.getUsers()) {
  System.out.println(user.getUid());
}

System.out.println("Unable to find users corresponding to these identifiers:");
for (UserIdentifier uid : result.getNotFound()) {
  System.out.println(uid);
}

Python

from firebase_admin import auth

result = auth.get_users([
    auth.UidIdentifier('uid1'),
    auth.EmailIdentifier('user2@example.com'),
    auth.PhoneIdentifier(+15555550003),
    auth.ProviderIdentifier('google.com', 'google_uid4')
])

print('Successfully fetched user data:')
for user in result.users:
    print(user.uid)

print('Unable to find users corresponding to these identifiers:')
for uid in result.not_found:
    print(uid)

Pergi

getUsersResult, err := client.GetUsers(ctx, []auth.UserIdentifier{
	auth.UIDIdentifier{UID: "uid1"},
	auth.EmailIdentifier{Email: "user@example.com"},
	auth.PhoneIdentifier{PhoneNumber: "+15555551234"},
	auth.ProviderIdentifier{ProviderID: "google.com", ProviderUID: "google_uid1"},
})
if err != nil {
	log.Fatalf("error retriving multiple users: %v\n", err)
}

log.Printf("Successfully fetched user data:")
for _, u := range getUsersResult.Users {
	log.Printf("%v", u)
}

log.Printf("Unable to find users corresponding to these identifiers:")
for _, id := range getUsersResult.NotFound {
	log.Printf("%v", id)
}

C#

GetUsersResult result = await FirebaseAuth.DefaultInstance.GetUsersAsync(
    new List<UserIdentifier>
    {
        new UidIdentifier("uid1"),
        new EmailIdentifier("user2@example.com"),
        new PhoneIdentifier("+15555550003"),
        new ProviderIdentifier("google.com", "google_uid4"),
    });

Console.WriteLine("Successfully fetched user data:");
foreach (UserRecord user in result.Users)
{
    Console.WriteLine($"User: {user.Uid}");
}

Console.WriteLine("Unable to find users corresponding to these identifiers:");
foreach (UserIdentifier uid in result.NotFound)
{
    Console.WriteLine($"{uid}");
}

Metode ini mengembalikan daftar dengan ukuran yang sama dengan daftar input, dengan setiap entri berisi UserRecord yang sesuai atau kesalahan yang menunjukkan mengapa pengenal tersebut tidak dapat dicari. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Buat pengguna

Admin SDK menyediakan metode yang memungkinkan Anda membuat pengguna Firebase Authentication baru. Metode ini menerima objek yang berisi informasi profil untuk disertakan dalam akun pengguna yang baru dibuat:

Node.js

getAuth()
  .createUser({
    email: 'user@example.com',
    emailVerified: false,
    phoneNumber: '+11234567890',
    password: 'secretPassword',
    displayName: 'John Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: false,
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((error) => {
    console.log('Error creating new user:', error);
  });

Jawa

CreateRequest request = new CreateRequest()
    .setEmail("user@example.com")
    .setEmailVerified(false)
    .setPassword("secretPassword")
    .setPhoneNumber("+11234567890")
    .setDisplayName("John Doe")
    .setPhotoUrl("http://www.example.com/12345678/photo.png")
    .setDisabled(false);

UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());

Python

user = auth.create_user(
    email='user@example.com',
    email_verified=False,
    phone_number='+15555550100',
    password='secretPassword',
    display_name='John Doe',
    photo_url='http://www.example.com/12345678/photo.png',
    disabled=False)
print('Sucessfully created new user: {0}'.format(user.uid))

Pergi

params := (&auth.UserToCreate{}).
	Email("user@example.com").
	EmailVerified(false).
	PhoneNumber("+15555550100").
	Password("secretPassword").
	DisplayName("John Doe").
	PhotoURL("http://www.example.com/12345678/photo.png").
	Disabled(false)
u, err := client.CreateUser(ctx, params)
if err != nil {
	log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)

C#

UserRecordArgs args = new UserRecordArgs()
{
    Email = "user@example.com",
    EmailVerified = false,
    PhoneNumber = "+11234567890",
    Password = "secretPassword",
    DisplayName = "John Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = false,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");

Secara default, Firebase Authentication akan menghasilkan uid acak untuk pengguna baru. Jika Anda ingin menentukan uid Anda sendiri untuk pengguna baru, Anda dapat memasukkannya sebagai argumen yang diteruskan ke metode pembuatan pengguna:

Node.js

getAuth()
  .createUser({
    uid: 'some-uid',
    email: 'user@example.com',
    phoneNumber: '+11234567890',
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((error) => {
    console.log('Error creating new user:', error);
  });

Jawa

CreateRequest request = new CreateRequest()
    .setUid("some-uid")
    .setEmail("user@example.com")
    .setPhoneNumber("+11234567890");

UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());

Python

user = auth.create_user(
    uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))

Pergi

params := (&auth.UserToCreate{}).
	UID(uid).
	Email("user@example.com").
	PhoneNumber("+15555550100")
u, err := client.CreateUser(ctx, params)
if err != nil {
	log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)

C#

UserRecordArgs args = new UserRecordArgs()
{
    Uid = "some-uid",
    Email = "user@example.com",
    PhoneNumber = "+11234567890",
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");

Setiap kombinasi dari properti berikut dapat diberikan:

Tabel 1. Properti yang didukung oleh operasi buat pengguna

Properti Jenis Keterangan
uid rangkaian uid untuk ditetapkan ke pengguna yang baru dibuat. Harus berupa string antara 1 dan 128 karakter, inklusif. Jika tidak disediakan, uid acak akan dibuat secara otomatis.
email rangkaian Email utama pengguna. Harus alamat e-mail yang valid.
emailVerified boolean Apakah email utama pengguna diverifikasi atau tidak. Jika tidak disediakan, defaultnya adalah false .
phoneNumber rangkaian Nomor telepon utama pengguna. Harus merupakan nomor telepon valid yang sesuai dengan spesifikasi E.164.
password rangkaian Kata sandi pengguna yang mentah dan tidak di-hash. Panjangnya minimal harus enam karakter.
displayName rangkaian Nama tampilan pengguna.
photoURL rangkaian URL foto pengguna.
disabled boolean Apakah pengguna dinonaktifkan atau tidak. true untuk penyandang cacat; false untuk diaktifkan. Jika tidak disediakan, defaultnya adalah false .

Metode pembuatan pengguna mengembalikan objek UserRecord untuk pengguna yang baru dibuat.

Jika uid , email, atau nomor telepon yang diberikan sudah digunakan oleh pengguna yang ada atau pengguna tidak dapat dibuat karena alasan lain, metode di atas gagal dengan kesalahan. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Perbarui pengguna

Firebase Admin SDK memfasilitasi modifikasi data pengguna yang ada. Anda perlu menentukan uid bersama dengan properti yang akan diperbarui untuk pengguna itu:

Node.js

getAuth()
  .updateUser(uid, {
    email: 'modifiedUser@example.com',
    phoneNumber: '+11234567890',
    emailVerified: true,
    password: 'newPassword',
    displayName: 'Jane Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: true,
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully updated user', userRecord.toJSON());
  })
  .catch((error) => {
    console.log('Error updating user:', error);
  });

Jawa

UpdateRequest request = new UpdateRequest(uid)
    .setEmail("user@example.com")
    .setPhoneNumber("+11234567890")
    .setEmailVerified(true)
    .setPassword("newPassword")
    .setDisplayName("Jane Doe")
    .setPhotoUrl("http://www.example.com/12345678/photo.png")
    .setDisabled(true);

UserRecord userRecord = FirebaseAuth.getInstance().updateUser(request);
System.out.println("Successfully updated user: " + userRecord.getUid());

Python

user = auth.update_user(
    uid,
    email='user@example.com',
    phone_number='+15555550100',
    email_verified=True,
    password='newPassword',
    display_name='John Doe',
    photo_url='http://www.example.com/12345678/photo.png',
    disabled=True)
print('Sucessfully updated user: {0}'.format(user.uid))

Pergi

params := (&auth.UserToUpdate{}).
	Email("user@example.com").
	EmailVerified(true).
	PhoneNumber("+15555550100").
	Password("newPassword").
	DisplayName("John Doe").
	PhotoURL("http://www.example.com/12345678/photo.png").
	Disabled(true)
u, err := client.UpdateUser(ctx, uid, params)
if err != nil {
	log.Fatalf("error updating user: %v\n", err)
}
log.Printf("Successfully updated user: %v\n", u)

C#

UserRecordArgs args = new UserRecordArgs()
{
    Uid = uid,
    Email = "modifiedUser@example.com",
    PhoneNumber = "+11234567890",
    EmailVerified = true,
    Password = "newPassword",
    DisplayName = "Jane Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = true,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.UpdateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully updated user: {userRecord.Uid}");

Setiap kombinasi dari properti berikut dapat diberikan:

Tabel 2. Properti yang didukung oleh operasi pengguna pembaruan

Properti Jenis Keterangan
email rangkaian Email utama baru pengguna. Harus alamat e-mail yang valid.
emailVerified boolean Apakah email utama pengguna diverifikasi atau tidak. Jika tidak disediakan, defaultnya adalah false .
phoneNumber rangkaian Nomor telepon utama baru pengguna. Harus merupakan nomor telepon valid yang sesuai dengan spesifikasi E.164. Setel ke null untuk menghapus nomor telepon pengguna yang ada.
password rangkaian Kata sandi mentah baru yang tidak di-hash dari pengguna. Panjangnya minimal harus enam karakter.
displayName string | null Nama tampilan baru pengguna. Setel ke null untuk menghapus nama tampilan pengguna yang ada.
photoURL string | null URL foto baru pengguna. Setel ke null untuk menghapus URL foto pengguna yang ada. Jika bukan null , harus berupa URL yang valid.
disabled boolean Apakah pengguna dinonaktifkan atau tidak. true untuk penyandang cacat; false untuk diaktifkan.

Metode pengguna pembaruan mengembalikan objek UserRecord yang diperbarui saat pembaruan berhasil diselesaikan.

Jika uid yang diberikan tidak sesuai dengan pengguna yang ada, email atau nomor telepon yang diberikan sudah digunakan oleh pengguna yang ada, atau pengguna tidak dapat diperbarui karena alasan lain, metode di atas gagal dengan kesalahan. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Hapus pengguna

Firebase Admin SDK memungkinkan menghapus pengguna yang ada dengan uid mereka :

Node.js

getAuth()
  .deleteUser(uid)
  .then(() => {
    console.log('Successfully deleted user');
  })
  .catch((error) => {
    console.log('Error deleting user:', error);
  });

Jawa

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

Python

auth.delete_user(uid)
print('Successfully deleted user')

Pergi

err := client.DeleteUser(ctx, uid)
if err != nil {
	log.Fatalf("error deleting user: %v\n", err)
}
log.Printf("Successfully deleted user: %s\n", uid)

C#

await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
Console.WriteLine("Successfully deleted user.");

Metode pengguna hapus mengembalikan hasil kosong saat penghapusan berhasil diselesaikan.

Jika uid yang diberikan tidak sesuai dengan pengguna yang ada atau pengguna tidak dapat dihapus karena alasan lain, metode hapus pengguna akan membuat kesalahan. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Hapus Banyak Pengguna

Firebase Admin SDK juga dapat menghapus beberapa pengguna sekaligus. Namun, perhatikan bahwa menggunakan metode seperti deleteUsers(uids) untuk menghapus beberapa pengguna sekaligus tidak akan memicu event handler onDelete() untuk Cloud Functions for Firebase. Ini karena penghapusan batch tidak memicu peristiwa penghapusan pengguna pada setiap pengguna. Hapus pengguna satu per satu jika Anda ingin peristiwa penghapusan pengguna diaktifkan untuk setiap pengguna yang dihapus.

Node.js

getAuth()
  .deleteUsers([uid1, uid2, uid3])
  .then((deleteUsersResult) => {
    console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
    console.log(`Failed to delete ${deleteUsersResult.failureCount} users`);
    deleteUsersResult.errors.forEach((err) => {
      console.log(err.error.toJSON());
    });
  })
  .catch((error) => {
    console.log('Error deleting users:', error);
  });

Jawa

DeleteUsersResult result = FirebaseAuth.getInstance().deleteUsersAsync(
    Arrays.asList("uid1", "uid2", "uid3")).get();

System.out.println("Successfully deleted " + result.getSuccessCount() + " users");
System.out.println("Failed to delete " + result.getFailureCount() + " users");
for (ErrorInfo error : result.getErrors()) {
  System.out.println("error #" + error.getIndex() + ", reason: " + error.getReason());
}

Python

from firebase_admin import auth

result = auth.delete_users(["uid1", "uid2", "uid3"])

print('Successfully deleted {0} users'.format(result.success_count))
print('Failed to delete {0} users'.format(result.failure_count))
for err in result.errors:
    print('error #{0}, reason: {1}'.format(result.index, result.reason))

Pergi

deleteUsersResult, err := client.DeleteUsers(ctx, []string{"uid1", "uid2", "uid3"})
if err != nil {
	log.Fatalf("error deleting users: %v\n", err)
}

log.Printf("Successfully deleted %d users", deleteUsersResult.SuccessCount)
log.Printf("Failed to delete %d users", deleteUsersResult.FailureCount)
for _, err := range deleteUsersResult.Errors {
	log.Printf("%v", err)
}

C#

DeleteUsersResult result = await FirebaseAuth.DefaultInstance.DeleteUsersAsync(new List<string>
    {
        "uid1",
        "uid2",
        "uid3",
    });

Console.WriteLine($"Successfully deleted {result.SuccessCount} users.");
Console.WriteLine($"Failed to delete {result.FailureCount} users.");

foreach (ErrorInfo err in result.Errors)
{
    Console.WriteLine($"Error #{err.Index}, reason: {err.Reason}");
}

Metode hapus pengguna mengembalikan daftar kegagalan untuk pengguna yang tidak dapat dihapus. Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Daftar semua pengguna

Firebase Admin SDK memungkinkan pengambilan seluruh daftar pengguna dalam batch:

Node.js

const listAllUsers = (nextPageToken) => {
  // List batch of users, 1000 at a time.
  getAuth()
    .listUsers(1000, nextPageToken)
    .then((listUsersResult) => {
      listUsersResult.users.forEach((userRecord) => {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch((error) => {
      console.log('Error listing users:', error);
    });
};
// Start listing users from the beginning, 1000 at a time.
listAllUsers();

Jawa

// Start listing users from the beginning, 1000 at a time.
ListUsersPage page = FirebaseAuth.getInstance().listUsers(null);
while (page != null) {
  for (ExportedUserRecord user : page.getValues()) {
    System.out.println("User: " + user.getUid());
  }
  page = page.getNextPage();
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
page = FirebaseAuth.getInstance().listUsers(null);
for (ExportedUserRecord user : page.iterateAll()) {
  System.out.println("User: " + user.getUid());
}

Python

# Start listing users from the beginning, 1000 at a time.
page = auth.list_users()
while page:
    for user in page.users:
        print('User: ' + user.uid)
    # Get next batch of users.
    page = page.get_next_page()

# Iterate through all users. This will still retrieve users in batches,
# buffering no more than 1000 users in memory at a time.
for user in auth.list_users().iterate_all():
    print('User: ' + user.uid)

Pergi

// Note, behind the scenes, the Users() iterator will retrive 1000 Users at a time through the API
iter := client.Users(ctx, "")
for {
	user, err := iter.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		log.Fatalf("error listing users: %s\n", err)
	}
	log.Printf("read user user: %v\n", user)
}

// Iterating by pages 100 users at a time.
// Note that using both the Next() function on an iterator and the NextPage()
// on a Pager wrapping that same iterator will result in an error.
pager := iterator.NewPager(client.Users(ctx, ""), 100, "")
for {
	var users []*auth.ExportedUserRecord
	nextPageToken, err := pager.NextPage(&users)
	if err != nil {
		log.Fatalf("paging error %v\n", err)
	}
	for _, u := range users {
		log.Printf("read user user: %v\n", u)
	}
	if nextPageToken == "" {
		break
	}
}

C#

// Start listing users from the beginning, 1000 at a time.
var pagedEnumerable = FirebaseAuth.DefaultInstance.ListUsersAsync(null);
var responses = pagedEnumerable.AsRawResponses().GetAsyncEnumerator();
while (await responses.MoveNextAsync())
{
    ExportedUserRecords response = responses.Current;
    foreach (ExportedUserRecord user in response.Users)
    {
        Console.WriteLine($"User: {user.Uid}");
    }
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
var enumerator = FirebaseAuth.DefaultInstance.ListUsersAsync(null).GetAsyncEnumerator();
while (await enumerator.MoveNextAsync())
{
    ExportedUserRecord user = enumerator.Current;
    Console.WriteLine($"User: {user.Uid}");
}

Setiap kumpulan hasil berisi daftar pengguna dan token halaman berikutnya yang digunakan untuk mendaftar kumpulan pengguna berikutnya. Ketika semua pengguna telah terdaftar, tidak ada pageToken yang dikembalikan.

Jika tidak ada bidang maxResults yang ditentukan, default 1000 pengguna per batch digunakan. Ini juga merupakan jumlah maksimum pengguna yang diizinkan untuk dicantumkan dalam satu waktu. Nilai apa pun yang lebih besar dari maksimum akan menimbulkan kesalahan argumen. Jika tidak ada pageToken yang ditentukan, operasi akan mencantumkan pengguna dari awal, diurutkan oleh uid .

Untuk daftar lengkap kode kesalahan, termasuk deskripsi dan langkah-langkah penyelesaian, lihat Kesalahan API Otentikasi Admin .

Hash kata sandi dari pengguna yang terdaftar

API ini juga mengembalikan passwordSalt dan passwordHash yang di-hash oleh backend Firebase Auth untuk pengguna sandi jika akun pengguna/layanan yang digunakan untuk membuat token akses OAuth permintaan memiliki izin firebaseauth.configs.getHashConfig . Jika tidak, passwordHash dan passwordSalt tidak akan disetel.

Karena sifat hash sandi yang sensitif, akun layanan Firebase Admin SDK tidak memiliki izin firebaseauth.configs.getHashConfig secara default. Anda tidak dapat menambahkan izin secara langsung ke akun pengguna/layanan, tetapi Anda dapat melakukannya secara tidak langsung dengan membuat peran IAM khusus .

Untuk membuat peran IAM khusus:

  1. Buka halaman Peran di panel IAM & admin di Google Cloud Console.
  2. Pilih proyek Anda dari drop-down di bagian atas halaman.
  3. Klik BUAT PERAN
  4. Klik TAMBAHKAN IZIN
  5. Cari izin firebaseauth.configs.getHashConfig dan pilih kotak centang itu.
  6. Klik TAMBAHKAN
  7. Klik BUAT untuk menyelesaikan pembuatan peran baru.

Tambahkan peran khusus yang dibuat ke akun pengguna/layanan di halaman IAM:

  1. Di panel IAM & admin , pilih IAM
  2. Pilih layanan atau akun pengguna dari daftar anggota untuk diedit.
  3. Klik TAMBAHKAN PERAN LAIN .
  4. Cari peran khusus baru yang dibuat sebelumnya.
  5. Klik SIMPAN .