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 Multi-faktor

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

Dokumen ini menunjukkan cara menggunakan Firebase Admin SDK untuk mengelola pengguna multifaktor Anda secara terprogram. Saat mengelola pengguna multifaktor, Anda memiliki akses ke rentang properti pengguna yang lebih banyak dibandingkan dengan pengguna satu faktor .

Sebelum kamu memulai

Instal SDK Admin Node.js . Bahasa Admin SDK lainnya saat ini tidak didukung.

Mendapatkan pengguna

Anda dapat mengambil data terkait multi-faktor pengguna, seperti daftar faktor kedua yang terdaftar, dari objek UserRecord . Untuk mendapatkan catatan pengguna, panggil getUser() atau getUserByEmail() .

Contoh di bawah ini menunjukkan pengguna terdaftar multi-faktor:

// console.log(userRecord.toJSON());
{
  uid: 'some-uid',
  displayName: 'John Doe',
  email: 'johndoe@gmail.com',
  photoURL: 'http://www.example.com/12345678/photo.png',
  emailVerified: true,
  phoneNumber: '+11234567890',
  // Set this user as admin.
  customClaims: {admin: true},
  // User with Google provider.
  providerData: [{
    uid: 'google-uid',
    email: 'johndoe@gmail.com',
    displayName: 'John Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    providerId: 'google.com'
  }],
  multiFactor: {
    enrolledFactors: [
      // 2FA with SMS as 2nd factor.
      {
        uid: '53HG4HG45HG8G04GJ40J4G3J',
        phoneNumber: '+16505551234',
        displayName: 'Work phone',
        enrollmentTime: 'Fri, 22 Sep 2017 01:49:58 GMT',
        factorId: 'phone',
      },
    ],
  },
};

Daftar pengguna

Kode di bawah ini menunjukkan cara membuat daftar semua pengguna dan memeriksa apakah mereka memiliki faktor sekunder yang terdaftar:

admin.auth().listUsers(1000, nextPageToken)
  .then((listUsersResult) => {
    listUsersResult.users.forEach((userRecord) => {
      // Multi-factor enrolled users second factors can be retrieved via:
      if (userRecord.multiFactor) {
        userRecord.multiFactor.enrolledFactors.forEach((enrolledFactor) => {
          console.log(userRecord.uid, enrolledFactor.toJSON());
        });
      }
    });
  })
  .catch((error) => {
    console.log('Error listing users:', error);
  });

Pengguna dikembalikan dalam batch, dipesan oleh uid mereka. Setiap kumpulan hasil berisi daftar pengguna, dan token halaman berikutnya yang digunakan untuk mengambil kumpulan berikutnya. Ketika semua pengguna telah terdaftar, tidak ada pageToken yang dikembalikan.

Bidang maxResult menentukan ukuran batch maksimum. Nilai default dan maksimum adalah 1000.

Membuat pengguna

Panggil createUser() untuk membuat pengguna baru. Pengguna baru dengan faktor sekunder harus memiliki alamat email terverifikasi (setel emailVerified ke true ) dan menggunakan faktor pertama yang didukung untuk masuk. Maksimal 5 faktor sekunder diperbolehkan per pengguna.

Contoh menunjukkan cara membuat pengguna baru dengan 2 faktor sekunder:

admin.auth().createUser({
  uid: '123456789',
  email: 'user@example.com',
  emailVerified: true,
  password: 'password',
  multiFactor: {
    enrolledFactors: [
      // When creating users with phone second factors, the uid and
      // enrollmentTime should not be specified. These will be provisioned by
      // the Auth server.
      // Primary second factor.
      {
        phoneNumber: '+16505550001',
        displayName: 'Corp phone',
        factorId: 'phone',
      },
      // Backup second factor.
      {
        phoneNumber: '+16505550002',
        displayName: 'Personal phone',
        factorId: 'phone'
      },
    ],
  },
})
.then((userRecord) => {
  console.log(userRecord.multiFactor.enrolledFactors);
})
.catch((error) => {
  console.log(error);
});

Memperbarui pengguna

Untuk memperbarui pengguna yang ada, panggil updateUser() :

admin.auth().updateUser('123456789', {
  multiFactor: {
    enrolledFactors: [
      {
        // uid will be auto-generated.
        phoneNumber: '+16505550003',
        displayName: 'Spouse\'s phone',
        factorId: 'phone',
      },
      {
        // uid can also be specified. This is useful if a new second factor is added and an
        // existing enrolled second factor is kept unmodified.
        uid: 'existing-enrolled-mfa-uid',
        phoneNumber: '+16505550004',
        displayName: 'Personal phone',
        factorId: 'phone',
      },
      {
        phoneNumber: '+16505550005',
        displayName: 'Backup phone',
        factorId: 'phone',
        // Enrollment time can also be explicitly specified.
        enrollmentTime: new Date().toUTCString(),
      },
    ],
  },
})
.then((userRecord) => {
  console.log(userRecord.multiFactor.enrolledFactors);
})
.catch((error) => {
  console.log(error);
});

Menambahkan faktor sekunder baru

Memanggil updateUser() dengan daftar enrolledFactors akan menghapus salah satu faktor sekunder pengguna saat ini. Untuk menambahkan faktor sekunder baru sambil mempertahankan yang sudah ada, cari pengguna terlebih dahulu, lalu tambahkan faktor baru ke daftar:

function enrollSecondFactor(userId, secondFactorPhoneNumber, secondFactorDisplayName) {
  return admin.auth().getUser(userId)
    .then((userRecord) => {
      const updatedList = (userRecord.multiFactor &&
        userRecord.multiFactor.toJSON().enrolledFactors) || [];
      updatedList.push({
        phoneNumber: secondFactorPhoneNumber,
        displayName: secondFactorDisplayName,
        factorId: 'phone',
      });
      return admin.auth().updateUser(userRecord.uid, {
        multiFactor: {
          enrolledFactors: updatedList,
        },
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

Menghapus faktor sekunder

Untuk sepenuhnya membatalkan pendaftaran pengguna dari autentikasi multi-faktor, setel enrolledFactors ke null atau larik kosong:

admin.auth().updateUser({
  uid: '123456789',
  multiFactor: {
    enrolledFactors: null,
  },
})
.then((userRecord) => {
  console.log(userRecord.multiFactor);
})
.catch((error) => {
  console.log(error);
});