Buka konsol

Mengelola Pengguna

Firebase Admin SDK menyediakan API untuk mengelola pengguna Firebase Authentication Anda dengan hak istimewa yang lebih. Dengan API pengelolaan pengguna admin, Anda dapat menyelesaikan tugas-tugas berikut secara terprogram melalui lingkungan server yang aman:

  • Membuat pengguna baru tanpa pembatasan atau pengurangan tingkat.
  • Mencari pengguna berdasarkan kriteria yang berbeda, seperti uid, email, atau nomor telepon.
  • Mencantumkan semua pengguna project tertentu dalam batch.
  • Mengakses metadata pengguna, termasuk tanggal pembuatan akun dan tanggal terakhir login.
  • Menghapus pengguna tanpa memerlukan sandi mereka.
  • Mengupdate 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.
  • Penyediaan offline untuk pengguna dalam keadaan nonaktif, kemudian mengontrol kapan mengaktifkannya.
  • Membangun 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 informasi lebih lanjut tentang cara menginisialisasi Admin SDK.

Mengambil data pengguna

Cara utama untuk mengidentifikasi pengguna adalah melalui uid mereka, sebuah pengenal unik bagi pengguna tersebut. Admin SDK menyediakan metode yang memungkinkan pengambilan informasi profil pengguna dengan uid mereka:

Node.js

admin.auth().getUser(uid)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(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 pengguna tidak dapat diambil karena alasan lain, metode di atas akan menghasilkan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaiannya, lihat Error pada Admin Authentication API.

Dalam beberapa kasus, Anda hanya memiliki email pengguna, bukan uid mereka. Firebase Admin SDK mendukung pencarian informasi pengguna dengan email:

Node.js

admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(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 pengguna tidak dapat diambil karena alasan lain, Admin SDK akan menghasilkan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaiannya, lihat 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

admin.auth().getUserByPhoneNumber(phoneNumber)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(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 menghasilkan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaiannya, lihat 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

admin.auth().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(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch(function(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 tersebut, Anda dapat menyertakannya dalam argumen yang diteruskan ke metode pembuatan pengguna:

Node.js

admin.auth().createUser({
  uid: 'some-uid',
  email: 'user@example.com',
  phoneNumber: '+11234567890'
})
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch(function(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 dan 128, inklusif. Jika tidak diberikan, uid acak akan dibuat secara otomatis.
email string Email utama pengguna. Alamat email harus 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 pengguna yang ditampilkan.
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 gagal dengan kesalahan. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaiannya, lihat Error pada Admin Authentication API.

Mengupdate pengguna

Firebase Admin SDK memfasilitasi modifikasi data pengguna yang sudah ada. Anda perlu menentukan uid beserta properti yang akan diperbarui untuk pengguna tersebut:

Node.js

admin.auth().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(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully updated user', userRecord.toJSON());
  })
  .catch(function(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 update pengguna

Properti Jenis Deskripsi
email string Email utama baru milik pengguna. Alamat email harus valid.
emailVerified boolean Apakah email utama pengguna telah diverifikasi atau belum. Jika tidak diberikan, defaultnya adalah false.
phoneNumber string Nomor telepon utama pengguna yang baru. Harus berupa nomor telepon sesuai spesifikasi E.164 yang valid. Setel ke null untuk menghapus nomor telepon pengguna yang sudah ada.
password string Sandi pengguna baru yang masih mentah dan belum di-hash. Minimal harus berisi 6 karakter
displayName string | null Nama baru pengguna yang ditampilkan. 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. Jika bukan , maka value itu harus berupa URL yang valid.
disabled boolean Apakah pengguna dinonaktifkan atau tidak. true jika dinonaktifkan; dan false jika diaktifkan.

Metode update pengguna akan menampilkan objek UserRecord yang diupdate saat update 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 diupdate karena alasan lain, metode di atas gagal dengan error. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaiannya, lihat Error pada Admin Authentication API.

Menghapus pengguna

Dengan Firebase Admin SDK, pengguna yang sudah ada dapat dihapus melalui uid mereka:

Node.js

admin.auth().deleteUser(uid)
  .then(function() {
    console.log('Successfully deleted user');
  })
  .catch(function(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 lainnya, metode penghapusan pengguna ini menimbulkan kesalahan. Untuk mengetahui daftar lengkap kode error, termasuk deskripsi dan langkah penyelesaiannya, lihat Error pada Admin Authentication API.

Mencantumkan semua pengguna

Firebase Admin SDK memungkinkan pengambilan seluruh daftar pengguna dalam batch:

Node.js

function listAllUsers(nextPageToken) {
  // List batch of users, 1000 at a time.
  admin.auth().listUsers(1000, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch(function(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().GetEnumerator();
while (await responses.MoveNext())
{
    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).GetEnumerator();
while (await enumerator.MoveNext())
{
    ExportedUserRecord user = enumerator.Current;
    Console.WriteLine($"User: {user.Uid}");
}

Setiap batch hasil berisi daftar pengguna dan token halaman berikutnya yang digunakan untuk mencantumkan batch pengguna berikutnya. Setelah semua pengguna sudah tercantum, tidak ada pageToken yang ditampilkan.

Jika kolom maxResults tidak ditentukan, value default 1.000 pengguna per batch akan digunakan. Angka ini juga menunjukkan jumlah pengguna maksimum yang akan dicantumkan pada satu waktu. Setiap value yang lebih besar daripada value maksimum akan menyebabkan 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 penyelesaiannya, lihat Error pada Admin Authentication API.

Sandi hash dari pengguna yang tercantum

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 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, namun Anda dapat melakukannya secara tidak langsung dengan membuat peran IAM khusus.

Untuk membuat peran IAM khusus:

  1. Buka panel Peran di panel IAM & admin di Konsol GCP.
  2. Pilih project Anda dari drop-down di bagian atas halaman.
  3. Klik BUAT PERAN
  4. Klik TAMBAHKAN IZIN
  5. Telusuri untuk izin firebaseauth.configs.getHashConfig dan pilih kotak centang tersebut.
  6. Klik TAMBAHKAN.
  7. Klik BUAT untuk menyelesaikan pembuatan peran baru.

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

  1. Pada panel IAM & admin, pilih IAM
  2. Pilih layanan atau akun pengguna dari daftar anggota yang akan diedit.
  3. Klik TAMBAHKAN PERAN LAIN.
  4. Telusuri peran kustom baru yang telah dibuat sebelumnya.
  5. Klik SIMPAN.