Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

قبل ان تبدأ

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

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

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

Node.js

getAuth()
  .getUser(uid)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((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 لا ينتمي إلى مستخدم موجود أو لا يمكن للمستخدم أن تكون المنال لأي سبب آخر، الأسلوب أعلاه يلقي خطأ. للحصول على قائمة كاملة من رموز الخطأ، بما في ذلك وصف والخطوات القرار، انظر أخطاء API الادارية أصيل .

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

Node.js

getAuth()
  .getUserByEmail(email)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((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 الكائن للمستخدم الموافق البريد الإلكتروني المقدمة.

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

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

Node.js

getAuth()
  .getUserByPhoneNumber(phoneNumber)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data:  ${userRecord.toJSON()}`);
  })
  .catch((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 الكائن للمستخدم المقابلة لرقم الهاتف المقدمة.

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

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

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

Node.js

getAuth()
  .getUsers([
    { uid: 'uid1' },
    { email: 'user2@example.com' },
    { phoneNumber: '+15555550003' },
    { providerId: 'google.com', providerUid: 'google_uid4' },
  ])
  .then((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((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 أو خطأ يشير لماذا كان هذا المعرف غير قادرة على أن نظرت إلى أعلى. للحصول على قائمة كاملة من رموز الخطأ، بما في ذلك وصف والخطوات القرار، انظر أخطاء API مصادقة الإدارة .

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

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

Node.js

getAuth()
  .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((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((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

getAuth()
  .createUser({
    uid: 'some-uid',
    email: 'user@example.com',
    phoneNumber: '+11234567890',
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((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 أو البريد الإلكتروني أو رقم الهاتف قيد الاستخدام من قبل مستخدم موجود أو لا يمكن إنشاء المستخدم لأي سبب آخر، فشل الأسلوب أعلاه مع وجود خطأ. للحصول على قائمة كاملة من رموز الخطأ، بما في ذلك وصف والخطوات القرار، انظر أخطاء API مصادقة الإدارة .

تحديث مستخدم

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

Node.js

getAuth()
  .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((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully updated user', userRecord.toJSON());
  })
  .catch((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 لمسح عنوان URL للصورة الحالية للمستخدم. إذا غير null ، يجب أن يكون URL صالح.
disabled قيمة منطقية سواء تم تعطيل المستخدم أم لا. true للمعاقين. false لتمكين.

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

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

حذف مستخدم

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

Node.js

getAuth()
  .deleteUser(uid)
  .then(() => {
    console.log('Successfully deleted user');
  })
  .catch((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.");

يعيد التابع delete user نتيجة فارغة عند اكتمال الحذف بنجاح.

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

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

يمكن أيضًا أن تحذف Firebase Admin SDK عدة مستخدمين في وقت واحد. ومع ذلك، لاحظ أن استخدام أساليب مثل deleteUsers(uids) لحذف العديد من المستخدمين في وقت واحد لن يؤدي onDelete() معالجات الأحداث عن وظائف الغيمة لFirebase. وذلك لأن الحذف المجمّع لا يؤدي إلى حدث حذف مستخدم على كل مستخدم. احذف المستخدمين واحدًا تلو الآخر إذا كنت تريد تنشيط أحداث حذف المستخدم لكل مستخدم محذوف.

Node.js

getAuth()
  .deleteUsers([uid1, uid2, uid3])
  .then((deleteUsersResult) => {
    console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
    console.log(`Failed to delete ${deleteUsersResult.failureCount} users`);
    deleteUsersResult.errors.forEach((err) => {
      console.log(err.error.toJSON());
    });
  })
  .catch((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}");
}

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

قائمة بجميع المستخدمين

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

Node.js

const listAllUsers = (nextPageToken) => {
  // List batch of users, 1000 at a time.
  getAuth()
    .listUsers(1000, nextPageToken)
    .then((listUsersResult) => {
      listUsersResult.users.forEach((userRecord) => {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch((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().GetAsyncEnumerator();
while (await responses.MoveNextAsync())
{
    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).GetAsyncEnumerator();
while (await enumerator.MoveNextAsync())
{
    ExportedUserRecord user = enumerator.Current;
    Console.WriteLine($"User: {user.Uid}");
}

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

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

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

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

كما يعود هذا API في passwordSalt و passwordHash تجزئته من قبل الخلفية Firebase أصيل للمستخدمين كلمة المرور إذا استخدمت حساب المستخدم / خدمة لتوليد الوصول أوث طلب رمز له firebaseauth.configs.getHashConfig إذن. وإلا فإن passwordHash و passwordSalt لن يتم تعيين.

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

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

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

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

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