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);
});