Firebase Admin SDK menyediakan API untuk mengelola pengguna Firebase Authentication dengan hak istimewa yang ditingkatkan. Dengan API pengelolaan pengguna admin, Anda dapat menyelesaikan tugas-tugas berikut secara terprogram dari lingkungan server yang aman:
- Membuat pengguna baru tanpa throttling atau pembatasan kapasitas.
- Mencari pengguna berdasarkan kriteria yang berbeda, seperti uid, email, atau nomor telepon.
- Menampilkan daftar semua pengguna project tertentu dalam batch.
- Mengakses metadata pengguna, termasuk tanggal pembuatan akun dan tanggal terakhir login.
- Menghapus pengguna tanpa memerlukan sandi mereka.
- Memperbarui properti pengguna, termasuk sandi mereka, tanpa harus login sebagai pengguna.
- Melakukan verifikasi email tanpa harus melalui alur tindakan yang tidak umum untuk melakukan verifikasi.
- Mengubah email pengguna tanpa mengirim link email untuk membatalkan perubahan ini.
- Membuat pengguna baru dengan nomor telepon tanpa harus melalui alur verifikasi SMS.
- Mengubah nomor telepon pengguna tanpa harus melalui alur verifikasi SMS.
- Melakukan penyediaan offline untuk pengguna dalam keadaan nonaktif, kemudian mengontrol kapan mengaktifkannya.
- Mem-build konsol pengguna khusus yang disesuaikan dengan sistem pengelolaan pengguna aplikasi tertentu.
Sebelum memulai
Untuk menggunakan API pengelolaan pengguna yang disediakan oleh Firebase Admin SDK, Anda harus memiliki akun layanan. Ikuti petunjuk penyiapan untuk mengetahui informasi lebih lanjut cara menginisialisasi Admin SDK.
Mengambil data pengguna
Cara utama untuk mengidentifikasi pengguna adalah melalui uid
-nya, yaitu ID unik bagi pengguna tersebut. 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);
});
Java
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))
Go
// 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 menampilkan objek UserRecord
untuk pengguna yang sesuai dengan uid
yang diberikan pada metode tersebut.
Jika uid
yang diberikan bukan milik pengguna yang sudah ada atau data pengguna tidak dapat diambil karena alasan lain, metode di atas akan menampilkan error.
Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan
langkah penyelesaiannya, lihat Error pada Admin Authentication API.
Dalam beberapa kasus, Anda hanya memiliki informasi email pengguna, bukan 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);
});
Java
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))
Go
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 menampilkan objek UserRecord
untuk pengguna yang sesuai dengan email yang diberikan.
Jika email yang diberikan bukan milik pengguna yang sudah ada atau data pengguna tidak dapat diambil karena alasan lain, Admin SDK akan menampilkan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaian, baca bagian Error pada Admin Authentication API.
Dalam kasus lain, Anda akan memiliki nomor telepon pengguna, bukan 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);
});
Java
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))
Go
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 menampilkan objek UserRecord
untuk pengguna yang sesuai dengan nomor telepon yang diberikan.
Jika nomor telepon yang diberikan bukan milik pengguna yang sudah ada atau data pengguna tidak dapat diambil karena alasan lain, Admin SDK akan menampilkan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaian, baca bagian Error pada Admin Authentication API.
Mengambil data pengguna secara massal
Firebase Admin SDK juga dapat digunakan untuk mengambil daftar pengguna berdasarkan ID yang Anda berikan. Anda dapat mengidentifikasi pengguna dengan ID pengguna, email, atau nomor telepon. Maksimum 100 ID dapat diberikan dalam satu panggilan. ID dapat berisi gabungan berbagai 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);
});
Java
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)
Go
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 akan menampilkan daftar dengan ukuran yang sama seperti daftar input, dengan setiap entri yang berisi UserRecord
terkait atau error yang menunjukkan penyebab ID tidak dapat dicari. Untuk mengetahui daftar lengkap kode error,
termasuk deskripsi dan langkah penyelesaian, baca bagian Error pada Admin Authentication
API.
Membuat 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);
});
Java
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))
Go
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 membuat uid
acak untuk pengguna baru. Namun,
jika Anda ingin menetapkan uid
sendiri untuk pengguna baru, Anda dapat menyertakannya
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);
});
Java
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))
Go
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}");
Kombinasi dari properti berikut ini dapat diberikan:
Tabel 1. Properti yang didukung oleh operasi pembuatan pengguna
Properti | Jenis | Deskripsi |
---|---|---|
uid |
string |
uid yang akan ditentukan ke pengguna yang baru dibuat. Harus dalam bentuk string dengan panjang karakter antara 1-128, inklusif. Jika tidak diberikan, uid acak akan dibuat secara otomatis. uid yang lebih singkat menawarkan performa yang lebih baik.
|
email |
string | Email utama pengguna. Harus berupa alamat email yang valid. |
emailVerified |
boolean |
Apakah email utama pengguna telah diverifikasi atau belum. Jika tidak diberikan, defaultnya adalah false .
|
phoneNumber |
string | Nomor telepon utama pengguna. Harus berupa nomor telepon sesuai spesifikasi E.164 yang valid. |
password |
string | Sandi pengguna yang masih mentah dan belum di-hash. Minimal harus berisi 6 karakter. |
displayName |
string | Nama tampilan pengguna. |
photoURL |
string | URL foto pengguna. |
disabled |
boolean |
Apakah pengguna dinonaktifkan atau tidak. true jika dinonaktifkan;
dan false jika diaktifkan. Jika tidak diberikan, defaultnya adalah
false .
|
Metode pembuatan pengguna menampilkan objek UserRecord
untuk pengguna yang baru dibuat.
Jika uid
, email, atau nomor telepon yang diberikan telah digunakan oleh pengguna yang sudah ada atau pengguna tidak dapat dibuat karena alasan lain, metode di atas akan gagal dan menampilkan error. Untuk mengetahui daftar lengkap kode error,
termasuk deskripsi dan langkah penyelesaian, baca bagian Error pada Admin Authentication
API.
Memperbarui data pengguna
Anda dapat menggunakan Firebase Admin SDK untuk mengubah data pengguna yang sudah ada. Anda perlu menentukan uid
beserta properti yang akan diperbarui untuk pengguna tersebut:
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);
});
Java
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))
Go
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}");
Kombinasi dari properti berikut ini dapat diberikan:
Tabel 2. Properti yang didukung oleh operasi pembaruan data pengguna
Properti | Jenis | Deskripsi |
---|---|---|
email |
string | Email utama baru milik pengguna. Harus berupa alamat email yang valid. |
emailVerified |
boolean |
Apakah email utama pengguna telah diverifikasi atau belum. Jika tidak diberikan, defaultnya adalah false .
|
phoneNumber |
string |
Nomor telepon utama baru pengguna. Harus berupa nomor telepon sesuai spesifikasi E.164 yang valid. Setel ke null untuk menghapus nomor telepon
pengguna yang sudah ada.
|
password |
string | Sandi baru pengguna yang masih mentah dan belum di-hash. Minimal harus berisi 6 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 , maka harus berupa URL yang valid.
|
disabled |
boolean |
Apakah pengguna dinonaktifkan atau tidak. true jika dinonaktifkan;
dan false jika diaktifkan.
|
Metode pembaruan data pengguna akan menampilkan objek UserRecord
yang diperbarui saat pembaruan berhasil dilakukan.
Jika uid
yang diberikan tidak sesuai dengan pengguna yang sudah ada, email atau nomor telepon yang diberikan telah digunakan oleh pengguna yang sudah ada, atau pengguna tidak dapat diperbarui karena alasan lain, metode di atas akan gagal dengan menampilkan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah
penyelesaian, baca bagian Error pada Admin Authentication API.
Menghapus pengguna
Dengan Firebase Admin SDK, pengguna yang sudah ada dapat dihapus melalui uid
mereka:
Node.js
getAuth()
.deleteUser(uid)
.then(() => {
console.log('Successfully deleted user');
})
.catch((error) => {
console.log('Error deleting user:', error);
});
Java
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
Python
auth.delete_user(uid)
print('Successfully deleted user')
Go
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 penghapusan pengguna akan menampilkan hasil kosong ketika penghapusan berhasil dilakukan.
Jika uid
yang diberikan tidak sesuai dengan pengguna yang sudah ada atau pengguna tidak dapat dihapus karena alasan lain, metode penghapusan pengguna ini akan menampilkan error.
Untuk mengetahui daftar lengkap kode error, termasuk deskripsi
dan langkah penyelesaian, baca bagian Error pada Admin Authentication API.
Menghapus Beberapa Pengguna
Firebase Admin SDK juga dapat menghapus beberapa pengguna sekaligus. Namun,
perlu diperhatikan bahwa menggunakan metode seperti deleteUsers(uids)
untuk menghapus beberapa pengguna
sekaligus tidak akan memicu pengendali peristiwa onDelete()
untuk Cloud Functions for Firebase.
Hal ini karena penghapusan dalam 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);
});
Java
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))
Go
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 penghapusan pengguna akan menampilkan daftar kegagalan untuk pengguna yang tidak dapat dihapus. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaian, baca bagian Error pada Admin Authentication API.
Menampilkan daftar semua pengguna
Firebase Admin SDK memungkinkan pengambilan daftar semua 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();
Java
// 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)
Go
// 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 batch hasil berisi daftar pengguna dan token halaman berikutnya yang digunakan untuk menampilkan daftar pengguna dalam batch berikutnya. Setelah semua pengguna sudah tercantum, tidak ada pageToken
yang ditampilkan.
Jika kolom maxResults
tidak ditentukan, nilai default 1.000 pengguna per batch akan digunakan.
Angka ini juga menunjukkan jumlah maksimum pengguna yang diizinkan untuk dicantumkan pada satu waktu. Setiap nilai yang lebih besar daripada nilai maksimum akan menampilkan error argumen.
Jika pageToken
tidak ditentukan, operasi akan mencantumkan pengguna dari awal, yang diurutkan berdasarkan uid
.
Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaian, baca bagian Error pada Admin Authentication API.
Hash sandi dari pengguna yang tercantum dalam daftar
API ini juga menampilkan 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 ditetapkan.
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:
- Buka halaman Peran di panel IAM & admin di Google Cloud console.
- Pilih project Anda dari drop-down di bagian atas halaman.
- Klik CREATE ROLE
- Klik ADD PERMISSIONS
- Telusuri izin
firebaseauth.configs.getHashConfig
dan pilih kotak centang tersebut. - Klik ADD.
- Klik CREATE untuk menyelesaikan pembuatan peran baru.
Tambahkan peran khusus yang dibuat ke akun pengguna/layanan di halaman IAM:
- Pada panel IAM & admin, pilih IAM
- Pilih akun layanan atau pengguna dari daftar anggota yang akan diedit.
- Klik ADD ANOTHER ROLE.
- Telusuri peran khusus baru yang telah dibuat sebelumnya.
- Klik SIMPAN.