Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

ادارة المستخدمين

توفر حزمة Firebase Admin SDK واجهة برمجة تطبيقات لإدارة مستخدمي مصادقة Firebase بامتيازات عالية. تمنحك واجهة برمجة تطبيقات إدارة مستخدم المشرف القدرة على إتمام المهام التالية برمجيًا من بيئة خادم آمنة:

  • قم بإنشاء مستخدمين جدد دون أي تقييد أو تقييد للمعدل.
  • ابحث عن المستخدمين وفقًا لمعايير مختلفة مثل uid أو البريد الإلكتروني أو رقم الهاتف.
  • أدرج جميع مستخدمي مشروع محدد على دفعات.
  • الوصول إلى البيانات الوصفية للمستخدم بما في ذلك تاريخ إنشاء الحساب وتاريخ تسجيل الدخول الأخير.
  • حذف المستخدمين دون طلب كلمة المرور الحالية الخاصة بهم.
  • قم بتحديث خصائص المستخدم - بما في ذلك كلمة المرور الخاصة بهم - دون الحاجة إلى تسجيل الدخول كمستخدم.
  • تحقق من رسائل البريد الإلكتروني دون الحاجة إلى المرور عبر تدفقات الإجراءات خارج النطاق للتحقق من رسائل البريد الإلكتروني.
  • قم بتغيير البريد الإلكتروني للمستخدم دون إرسال روابط البريد الإلكتروني لإبطال هذه التغييرات.
  • أنشئ مستخدمًا جديدًا برقم هاتف دون الحاجة إلى المرور بعملية التحقق من الرسائل القصيرة.
  • قم بتغيير رقم هاتف المستخدم دون الحاجة إلى المرور بعملية تدفق الرسائل القصيرة.
  • مستخدمو التزويد دون اتصال في حالة معطلة ثم يتحكمون لاحقًا في وقت تمكينهم.
  • إنشاء وحدات تحكم مخصصة للمستخدمين مصممة خصيصًا لنظام إدارة مستخدم تطبيق معين.

قبل ان تبدأ

لاستخدام واجهة برمجة تطبيقات إدارة المستخدمين المقدمة من Firebase Admin SDK ، يجب أن يكون لديك حساب خدمة. اتبع تعليمات الإعداد للحصول على مزيد من المعلومات حول كيفية تهيئة Admin SDK.

استرجاع بيانات المستخدم

الطريقة الأساسية لتحديد هوية المستخدم هي من خلال uid ، معرف فريد لهذا المستخدم. توفر SDK الادارية الأسلوب الذي يسمح جلب المعلومات الشخصية للمستخدمين عن طريق على uid :

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

جافا

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

بيثون

 from firebase_admin import auth

user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))
 

اذهب

 // 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) 

ج #

 UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");
 

تقوم هذه الطريقة بإرجاع كائن UserRecord للمستخدم المقابل لـ uid المقدم إلى الطريقة.

إذا كان uid المقدم لا ينتمي إلى مستخدم حالي أو لا يمكن جلب المستخدم لأي سبب آخر ، فإن الطريقة المذكورة أعلاه تطرح خطأ. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء Admin Auth API .

في بعض الحالات ، سيكون لديك بريد إلكتروني للمستخدم بدلاً من uid . تدعم حزمة Firebase Admin SDK البحث عن معلومات المستخدم من خلال بريد إلكتروني:

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

جافا

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

بيثون

 from firebase_admin import auth

user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))
 

اذهب

 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) 

ج #

 UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");
 

تقوم هذه الطريقة بإرجاع كائن UserRecord للمستخدم المقابل للبريد الإلكتروني المقدم.

إذا كان البريد الإلكتروني المقدم لا ينتمي إلى مستخدم حالي أو لا يمكن جلب المستخدم لأي سبب آخر ، فإن Admin SDK يطرح خطأ. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

في حالات أخرى ، سيكون لديك رقم هاتف المستخدم بدلاً من uid . يدعم Firebase Admin SDK البحث عن معلومات المستخدم برقم هاتف:

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

جافا

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

بيثون

 from firebase_admin import auth

user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))
 

اذهب

 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) 

ج #

 UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByPhoneNumberAsync(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");
 

تقوم هذه الطريقة بإرجاع كائن UserRecord للمستخدم المقابل لرقم الهاتف المقدم.

إذا كان رقم الهاتف المقدم لا ينتمي إلى مستخدم حالي أو لا يمكن جلب المستخدم لأي سبب آخر ، فإن Admin SDK يطرح خطأ. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

استرداد بيانات المستخدم بالجملة

تسمح حزمة Firebase Admin SDK أيضًا باسترداد قائمة المستخدمين بناءً على المعرّفات التي تقدمها. يمكنك تحديد المستخدمين من خلال معرف المستخدم أو البريد الإلكتروني أو رقم الهاتف. يمكن توفير 100 معرف بحد أقصى في مكالمة واحدة. يمكن أن تحتوي المعرّفات على مزيج من الأنواع:

Node.js

 admin.auth().getUsers([
    { uid: 'uid1' },
    { email: 'user2@example.com' },
    { phoneNumber: '+15555550003' },
    { providerId: 'google.com', providerUid: 'google_uid4' },
  ])
  .then(function(getUsersResult) {
    console.log('Successfully fetched user data:');
    getUsersResult.users.forEach((userRecord) => {
      console.log(userRecord);
    });

    console.log('Unable to find users corresponding to these identifiers:');
    getUsersResult.notFound.forEach((userIdentifier) => {
      console.log(userIdentifier);
    });
  })
  .catch(function(error) {
    console.log('Error fetching user data:', error);
  });
 

جافا

 GetUsersResult result = FirebaseAuth.getInstance().getUsersAsync(Arrays.asList(
    new UidIdentifier("uid1"),
    new EmailIdentifier("user2@example.com"),
    new PhoneIdentifier("+15555550003"),
    new ProviderIdentifier("google.com", "google_uid4"))).get();

System.out.println("Successfully fetched user data:");
for (UserRecord user : result.getUsers()) {
  System.out.println(user.getUid());
}

System.out.println("Unable to find users corresponding to these identifiers:");
for (UserIdentifier uid : result.getNotFound()) {
  System.out.println(uid);
}
 

بيثون

 from firebase_admin import auth

result = auth.get_users([
    auth.UidIdentifier('uid1'),
    auth.EmailIdentifier('user2@example.com'),
    auth.PhoneIdentifier(+15555550003),
    auth.ProviderIdentifier('google.com', 'google_uid4')
])

print('Successfully fetched user data:')
for user in result.users:
    print(user.uid)

print('Unable to find users corresponding to these identifiers:')
for uid in result.not_found:
    print(uid)
 

اذهب

 getUsersResult, err := client.GetUsers(ctx, []auth.UserIdentifier{
	auth.UIDIdentifier{UID: "uid1"},
	auth.EmailIdentifier{Email: "user@example.com"},
	auth.PhoneIdentifier{PhoneNumber: "+15555551234"},
	auth.ProviderIdentifier{ProviderID: "google.com", ProviderUID: "google_uid1"},
})
if err != nil {
	log.Fatalf("error retriving multiple users: %v\n", err)
}

log.Printf("Successfully fetched user data:")
for _, u := range getUsersResult.Users {
	log.Printf("%v", u)
}

log.Printf("Unable to find users corresponding to these identifiers:")
for _, id := range getUsersResult.NotFound {
	log.Printf("%v", id)
}
 

ج #

 GetUsersResult result = await FirebaseAuth.DefaultInstance.GetUsersAsync(
    new List<UserIdentifier>
    {
        new UidIdentifier("uid1"),
        new EmailIdentifier("user2@example.com"),
        new PhoneIdentifier("+15555550003"),
        new ProviderIdentifier("google.com", "google_uid4"),
    });

Console.WriteLine("Successfully fetched user data:");
foreach (UserRecord user in result.Users)
{
    Console.WriteLine($"User: {user.Uid}");
}

Console.WriteLine("Unable to find users corresponding to these identifiers:");
foreach (UserIdentifier uid in result.NotFound)
{
    Console.WriteLine($"{uid}");
}

 

تقوم هذه الطريقة بإرجاع قائمة بنفس حجم قائمة الإدخال ، حيث يحتوي كل إدخال على إما UserRecord المطابق أو خطأ يشير إلى سبب عدم التمكن من البحث عن هذا المعرف. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

قم بإنشاء مستخدم

توفر Admin SDK طريقة تتيح لك إنشاء مستخدم مصادقة Firebase جديد. تقبل هذه الطريقة كائنًا يحتوي على معلومات ملف التعريف ليتم تضمينه في حساب المستخدم الذي تم إنشاؤه حديثًا:

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

جافا

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

بيثون

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

اذهب

 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) 

ج #

 UserRecordArgs args = new UserRecordArgs()
{
    Email = "user@example.com",
    EmailVerified = false,
    PhoneNumber = "+11234567890",
    Password = "secretPassword",
    DisplayName = "John Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = false,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");
 

افتراضيا، مصادقة Firebase توليد عشوائي uid للمستخدم الجديد. إذا أردت بدلاً من ذلك تحديد uid الخاص بك للمستخدم الجديد ، يمكنك تضمينها الوسيطة التي تم تمريرها إلى طريقة إنشاء المستخدم:

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

جافا

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

بيثون

 user = auth.create_user(
    uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))
 

اذهب

 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) 

ج #

 UserRecordArgs args = new UserRecordArgs()
{
    Uid = "some-uid",
    Email = "user@example.com",
    PhoneNumber = "+11234567890",
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");
 

يمكن توفير أي مجموعة من الخصائص التالية:

جدول 1. الخصائص المدعمة بواسطة عملية تكوين المستخدم

خاصية نوع وصف
uid خيط uid إلى المستخدم الذي تم إنشاؤه حديثًا. يجب أن يتكون من سلسلة أحرف بين 1 و 128 حرفاً. إذا لم يتم توفيرها ، سيتم إنشاء uid عشوائي تلقائيًا.
email خيط البريد الإلكتروني الأساسي للمستخدم. يجب أن يكون عنوان بريد إلكتروني صالح.
emailVerified منطقي سواء تم التحقق من البريد الإلكتروني الأساسي للمستخدم أم لا. إذا لم يتم توفيره ، فإن القيمة الافتراضية تكون false .
phoneNumber خيط رقم الهاتف الأساسي للمستخدم. يجب أن يكون رقم هاتف صالحًا ومتوافقًا مع مواصفات E.164.
password خيط كلمة مرور المستخدم الأولية غير المجزأة. يجب أن يكون ستة أحرف على الأقل.
displayName خيط اسم العرض للمستخدمين.
photoURL خيط عنوان URL لصورة المستخدم.
disabled منطقي سواء تم تعطيل المستخدم أم لا. true للمعاقين ؛ false للتمكين. إذا لم يتم توفيره ، فإن القيمة الافتراضية تكون false .

تقوم طريقة إنشاء المستخدم بإرجاع كائن UserRecord للمستخدم الذي تم إنشاؤه حديثًا.

إذا كان uid المقدم أو البريد الإلكتروني أو رقم الهاتف قيد الاستخدام بالفعل من قبل مستخدم حالي أو لا يمكن إنشاء المستخدم لأي سبب آخر ، تفشل الطريقة المذكورة أعلاه مع وجود خطأ. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

قم بتحديث مستخدم

تُسهل حزمة Firebase Admin SDK تعديل بيانات المستخدم الحالي. تحتاج إلى تحديد uid مع الخصائص لتحديث هذا المستخدم:

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

جافا

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

بيثون

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

اذهب

 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) 

ج #

 UserRecordArgs args = new UserRecordArgs()
{
    Uid = uid,
    Email = "modifiedUser@example.com",
    PhoneNumber = "+11234567890",
    EmailVerified = true,
    Password = "newPassword",
    DisplayName = "Jane Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = true,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.UpdateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully updated user: {userRecord.Uid}");
 

يمكن توفير أي مجموعة من الخصائص التالية:

جدول 2. الخصائص التي تم عرضها بواسطة عملية مستخدم التحديث

خاصية نوع وصف
email خيط البريد الإلكتروني الأساسي الجديد للمستخدم. يجب أن يكون عنوان بريد إلكتروني صالح.
emailVerified منطقي سواء تم التحقق من البريد الإلكتروني الأساسي للمستخدم أم لا. إذا لم يتم توفيره ، فإن القيمة الافتراضية تكون false .
phoneNumber خيط رقم الهاتف الأساسي الجديد للمستخدم. يجب أن يكون رقم هاتف صالحًا ومتوافقًا مع مواصفات E.164. اضبط على null لمسح رقم هاتف المستخدم الحالي.
password خيط كلمة المرور الأولية الجديدة للمستخدم غير المجزأة. يجب أن يكون ستة أحرف على الأقل.
displayName السلسلة | null اسم العرض الجديد للمستخدمين. اضبط على null لمسح اسم العرض الحالي للمستخدم.
photoURL السلسلة | null عنوان URL الجديد لصورة المستخدمين. قم null على null لمسح عنوان URL الحالي الخاص بالصورة للمستخدم. إذا كانت غير null ، فيجب أن يكون عنوان URL صالحًا.
disabled منطقي سواء تم تعطيل المستخدم أم لا. true للمعاقين ؛ false للتمكين.

تقوم طريقة تحديث المستخدم بإرجاع كائن UserRecord محدث عند اكتمال التحديث بنجاح.

إذا كانت uid المقدمة لا تتوافق مع مستخدم حالي ، فالبريد الإلكتروني أو رقم الهاتف المقدم قيد الاستخدام بالفعل من قبل مستخدم حالي ، أو لا يمكن تحديث المستخدم لأي سبب آخر ، تفشل الطريقة المذكورة أعلاه مع وجود خطأ. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

حذف مستخدم

وFirebase الادارية SDK يسمح حذف المستخدمين الحاليين ب هم uid :

Node.js

 admin.auth().deleteUser(uid)
  .then(function() {
    console.log('Successfully deleted user');
  })
  .catch(function(error) {
    console.log('Error deleting user:', error);
  });
 

جافا

 FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
 

بيثون

 auth.delete_user(uid)
print('Successfully deleted user')
 

اذهب

 err := client.DeleteUser(ctx, uid)
if err != nil {
	log.Fatalf("error deleting user: %v\n", err)
}
log.Printf("Successfully deleted user: %s\n", uid) 

ج #

 await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
Console.WriteLine("Successfully deleted user.");
 

تُرجع طريقة حذف المستخدم نتيجة فارغة عند اكتمال الحذف بنجاح.

إذا كان uid المقدم لا يتوافق مع مستخدم حالي أو لا يمكن حذف المستخدم لأي سبب آخر ، فإن طريقة حذف المستخدم تؤدي إلى حدوث خطأ. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

حذف عدة مستخدمين

يمكن أيضًا لحزمة Firebase Admin SDK حذف عدة مستخدمين مرة واحدة:

Node.js

 admin.auth().deleteUsers([uid1, uid2, uid3])
  .then(function(deleteUsersResult) {
    console.log('Successfully deleted ' + deleteUsersResult.successCount + ' users');
    console.log('Failed to delete ' +  deleteUsersResult.failureCount + ' users');
    deleteUsersResult.errors.forEach(function(err) {
      console.log(err.error.toJSON());
    });
  })
  .catch(function(error) {
    console.log('Error deleting users:', error);
  });
 

جافا

 DeleteUsersResult result = FirebaseAuth.getInstance().deleteUsersAsync(
    Arrays.asList("uid1", "uid2", "uid3")).get();

System.out.println("Successfully deleted " + result.getSuccessCount() + " users");
System.out.println("Failed to delete " + result.getFailureCount() + " users");
for (ErrorInfo error : result.getErrors()) {
  System.out.println("error #" + error.getIndex() + ", reason: " + error.getReason());
}
 

بيثون

 from firebase_admin import auth

result = auth.delete_users(["uid1", "uid2", "uid3"])

print('Successfully deleted {0} users'.format(result.success_count))
print('Failed to delete {0} users'.format(result.failure_count))
for err in result.errors:
    print('error #{0}, reason: {1}'.format(result.index, result.reason))
 

اذهب

 deleteUsersResult, err := client.DeleteUsers(ctx, []string{"uid1", "uid2", "uid3"})
if err != nil {
	log.Fatalf("error deleting users: %v\n", err)
}

log.Printf("Successfully deleted %d users", deleteUsersResult.SuccessCount)
log.Printf("Failed to delete %d users", deleteUsersResult.FailureCount)
for _, err := range deleteUsersResult.Errors {
	log.Printf("%v", err)
}
 

ج #

 DeleteUsersResult result = await FirebaseAuth.DefaultInstance.DeleteUsersAsync(new List<string>
    {
        "uid1",
        "uid2",
        "uid3",
    });

Console.WriteLine($"Successfully deleted {result.SuccessCount} users.");
Console.WriteLine($"Failed to delete {result.FailureCount} users.");

foreach (ErrorInfo err in result.Errors)
{
    Console.WriteLine($"Error #{err.Index}, reason: {err.Reason}");
}

 

تقوم طريقة حذف المستخدمين بإرجاع قائمة حالات الفشل للمستخدمين الذين تعذر حذفهم. للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

سرد كافة المستخدمين

تسمح حزمة Firebase Admin SDK باسترداد القائمة الكاملة للمستخدمين على دفعات:

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

جافا

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

بيثون

 # 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)
 

اذهب

 // 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
	}
} 

ج #

 // Start listing users from the beginning, 1000 at a time.
var pagedEnumerable = FirebaseAuth.DefaultInstance.ListUsersAsync(null);
var responses = pagedEnumerable.AsRawResponses().GetEnumerator();
while (await responses.MoveNext())
{
    ExportedUserRecords response = responses.Current;
    foreach (ExportedUserRecord user in response.Users)
    {
        Console.WriteLine($"User: {user.Uid}");
    }
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
var enumerator = FirebaseAuth.DefaultInstance.ListUsersAsync(null).GetEnumerator();
while (await enumerator.MoveNext())
{
    ExportedUserRecord user = enumerator.Current;
    Console.WriteLine($"User: {user.Uid}");
}

 

تحتوي كل دفعة من النتائج على قائمة المستخدمين ورمز الصفحة التالي المستخدم لسرد الدفعة التالية من المستخدمين. عندما يتم إدراج جميع المستخدمين بالفعل ، لا يتم إرجاع أي pageToken .

إذا لم يتم تحديد حقل maxResults استخدام 1000 مستخدم افتراضي لكل دفعة. هذا هو أيضًا الحد الأقصى لعدد المستخدمين المسموح بإدراجه في كل مرة. ستؤدي أي قيمة أكبر من الحد الأقصى إلى ظهور خطأ وسيطة. إذا لم يتم تحديد pageToken ، فسوف تسرد العملية المستخدمين من البداية ، مرتبة حسب uid .

للحصول على قائمة كاملة برموز الخطأ ، بما في ذلك الأوصاف وخطوات الحل ، راجع أخطاء واجهة برمجة تطبيقات مصادقة المشرف .

تجزئات كلمة المرور للمستخدمين المدرجين

تُرجع واجهة برمجة التطبيقات هذه أيضًا passwordSalt و passwordHash التي تم تجزئتها بواسطة الواجهة الخلفية لـ Firebase Auth لمستخدمي كلمات المرور إذا كان حساب المستخدم / الخدمة المستخدم لإنشاء رمز وصول OAuth للطلب لديه إذن firebaseauth.configs.getHashConfig . وإلا لن يتم تعيين passwordHash التجزئة passwordHash passwordSalt الملح.

نظرًا للطبيعة الحساسة لتجزئة كلمة المرور ، لا يمتلك حساب خدمة Firebase Admin SDK إذن firebaseauth.configs.getHashConfig بشكل افتراضي. لا يمكنك إضافة إذن مباشرةً إلى حساب مستخدم / خدمة ، ولكن يمكنك القيام بذلك بشكل غير مباشر عن طريق إنشاء دور IAM مخصص .

لإنشاء دور IAM المخصص:

  1. انتقل إلى صفحة الأدوار في IAM ولوحة المشرف في وحدة تحكم GCP.
  2. حدد مشروعك من القائمة المنسدلة في أعلى الصفحة.
  3. انقر فوق إنشاء دور
  4. انقر فوق إضافة أذونات
  5. ابحث عن إذن firebaseauth.configs.getHashConfig وحدد مربع الاختيار هذا.
  6. انقر فوق إضافة
  7. انقر فوق إنشاء لإنهاء إنشاء الدور الجديد.

أضف الدور المخصص الذي تم إنشاؤه إلى حساب المستخدم / الخدمة في صفحة IAM:

  1. في لوحة IAM & admin ، حدد IAM
  2. حدد الخدمة أو حساب المستخدم من قائمة الأعضاء للتحرير.
  3. انقر فوق إضافة دور آخر .
  4. ابحث عن الدور المخصص الجديد الذي تم إنشاؤه مسبقًا.
  5. انقر فوق حفظ .