يوضّح لك هذا المستند كيفية استخدام 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
الحد الأقصى لحجم الدفعة. القيمة التلقائية والحد الأقصى هما 1000.
إنشاء مستخدم
استدعِ الدالة createUser()
لإنشاء مستخدم جديد. يجب أن يتوفّر لدى المستخدمين الجدد الذين لديهم عوامل ثانوية عنوان بريد إلكتروني تم إثبات ملكيته (اضبط emailVerified
على true
) وأن يستخدموا عاملاً أساسيًا متوافقًا لتسجيل الدخول. يُسمح بما يصل إلى 5 عوامل ثانوية لكل مستخدم.
يوضّح المثال التالي كيفية إنشاء مستخدم جديد باستخدام عاملَي مصادقة ثانويَين:
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);
});