Buka konsol

Kelola 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 dengan program melalui lingkungan server yang aman:

  • Membuat pengguna baru tanpa pembatasan atau pengurangan kapasitas.
  • 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 Anda 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)

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)

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 dan bukan uid orang tersebut. 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)

Metode ini menampilkan objek UserRecord untuk pengguna yang sesuai dengan email 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)

Secara default, Firebase Authentication akan membuat uid acak untuk pengguna baru. Namun, jika Anda ingin menetapkan uid sendiri untuk pengguna baru tersebut, Anda bisa 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)

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 untuk dinonaktifkan; false untuk diaktifkan. Jika nilai ini 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 error. 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)

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 yang ditampilkan dari si pengguna.
photoURL string | null URL foto baru pengguna. Setel ke null untuk menghapus URL foto pengguna. Jika nilainya bukan null, maka nilai itu harus berupa URL yang valid.
disabled boolean Apakah pengguna dinonaktifkan atau tidak. true untuk dinonaktifkan; false untuk diaktifkan.

Metode update pengguna akan menampilkan objek UserRecord yang diupdate ketika 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)

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 menghasilkan error. 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
	}
}

Setiap batch hasil berisi daftar pengguna dan token halaman berikutnya yang digunakan untuk mencantumkan batch pengguna berikutnya. Setelah semua pengguna tercantum, tidak ada pageToken yang ditampilkan. API ini juga menampilkan passwordSalt dan passwordHash yang di-hash oleh backend Firebase Auth jika pengguna adalah pengguna sandi.

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