เอกสารนี้แสดงวิธีใช้ Firebase Admin SDK เพื่อจัดการ ผู้ใช้ที่ใช้การตรวจสอบสิทธิ์แบบหลายปัจจัยด้วยโปรแกรม เมื่อจัดการผู้ใช้ที่ใช้การตรวจสอบสิทธิ์แบบหลายปัจจัย คุณจะมีสิทธิ์เข้าถึงพร็อพเพอร์ตี้ของผู้ใช้ที่หลากหลายมากขึ้นเมื่อเทียบกับ ผู้ใช้ที่ใช้การตรวจสอบสิทธิ์แบบปัจจัยเดียว
ก่อนเริ่มต้น
ติดตั้ง Node.js Admin SDK ปัจจุบันระบบยังไม่รองรับAdmin SDK ภาษาอื่นๆ
การรับผู้ใช้
คุณสามารถดึงข้อมูลที่เกี่ยวข้องกับการตรวจสอบสิทธิ์แบบหลายปัจจัยของผู้ใช้ เช่น รายการปัจจัยที่สองที่ลงทะเบียนไว้ จากออบเจ็กต์ UserRecord หากต้องการรับบันทึกของผู้ใช้ ให้เรียก getUser() หรือ getUserByEmail()
ตัวอย่างด้านล่างแสดงผู้ใช้ที่ลงทะเบียนใช้การตรวจสอบสิทธิ์แบบหลายปัจจัย
// 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',
},
],
},
};
การแสดงรายชื่อผู้ใช้
โค้ดด้านล่างแสดงวิธีแสดงรายชื่อผู้ใช้ทั้งหมดและตรวจสอบว่าผู้ใช้ได้ลงทะเบียนปัจจัยที่สองไว้หรือไม่
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);
});
ระบบจะแสดงผู้ใช้เป็นชุดๆ โดยเรียงตาม uid ผลลัพธ์แต่ละชุดจะมีรายชื่อผู้ใช้และโทเค็นหน้าถัดไปที่ใช้ดึงข้อมูลชุดถัดไป
เมื่อแสดงรายชื่อผู้ใช้ทั้งหมดแล้ว ระบบจะไม่แสดง pageToken
ฟิลด์ maxResult จะระบุขนาดกลุ่มสูงสุด ค่าเริ่มต้นและค่าสูงสุดคือ 1,000
การสร้างผู้ใช้
เรียก createUser() เพื่อสร้างผู้ใช้ใหม่ ผู้ใช้ใหม่ที่มีปัจจัยที่สองต้องมีอีเมลที่ยืนยันแล้ว (ตั้งค่า emailVerified เป็น true) และใช้วิธีลงชื่อเข้าใช้แบบปัจจัยแรกที่รองรับ อนุญาตให้มีปัจจัยที่สองได้สูงสุด 5 รายการต่อผู้ใช้ 1 ราย
ตัวอย่างแสดงวิธีสร้างผู้ใช้ใหม่ที่มีปัจจัยที่สอง 2 รายการ
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);
});
การอัปเดตผู้ใช้
หากต้องการอัปเดตผู้ใช้ที่มีอยู่ ให้เรียก updateUser()
admin.auth().updateUser(uid: '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);
});
การเพิ่มปัจจัยที่สองใหม่
การเรียก updateUser() พร้อมรายการ enrolledFactors จะลบปัจจัยที่สองปัจจุบันของผู้ใช้ออก หากต้องการเพิ่มปัจจัยที่สองใหม่โดยเก็บปัจจัยที่มีอยู่ไว้ ให้ค้นหาผู้ใช้ก่อน แล้วเพิ่มปัจจัยใหม่ลงในรายการ
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);
});
}
การนำปัจจัยที่สองออก
หากต้องการยกเลิกการลงทะเบียนผู้ใช้จากการตรวจสอบสิทธิ์แบบหลายปัจจัยโดยสมบูรณ์ ให้ตั้งค่า enrolledFactors เป็น null หรืออาร์เรย์ว่าง
admin.auth().updateUser(uid: '123456789', {
multiFactor: {
enrolledFactors: null,
},
})
.then((userRecord) => {
console.log(userRecord.multiFactor);
})
.catch((error) => {
console.log(error);
});