مدیریت کاربران

Firebase Admin SDK یک API برای مدیریت کاربران Firebase Authentication با امتیازات بالا ارائه می‌کند. API مدیریت کاربر ادمین به شما این امکان را می دهد که به صورت برنامه ریزی شده وظایف زیر را از یک محیط سرور امن انجام دهید:

  • کاربران جدید را بدون هیچ گونه محدودیت یا محدودیت نرخ ایجاد کنید.
  • کاربران را با معیارهای مختلفی مانند uid، ایمیل یا شماره تلفن جستجو کنید.
  • تمام کاربران یک پروژه مشخص شده را به صورت دسته ای لیست کنید.
  • به ابرداده های کاربر از جمله تاریخ ایجاد حساب و آخرین تاریخ ورود به سیستم دسترسی داشته باشید.
  • کاربران را بدون نیاز به رمز عبور موجود حذف کنید.
  • ویژگی های کاربر - از جمله رمز عبور آنها - را بدون نیاز به ورود به عنوان کاربر به روز کنید.
  • ایمیل‌ها را بدون نیاز به گذر از جریان‌های کنش خارج از باند برای تأیید ایمیل‌ها تأیید کنید.
  • ایمیل کاربر را بدون ارسال لینک ایمیل تغییر دهید تا این تغییرات لغو شود.
  • بدون نیاز به گذر از جریان تأیید پیامک، یک کاربر جدید با شماره تلفن ایجاد کنید.
  • بدون نیاز به گذر از جریان تأیید پیامک، شماره تلفن کاربر را تغییر دهید.
  • کاربران ارائه آفلاین در حالت غیرفعال هستند و بعداً زمان فعال کردن آنها را کنترل کنید.
  • کنسول های کاربر سفارشی بسازید که برای سیستم مدیریت کاربر یک برنامه خاص طراحی شده است.

قبل از شروع

برای استفاده از API مدیریت کاربر ارائه شده توسط Firebase Admin SDK، باید یک حساب سرویس داشته باشید. دستورالعمل های راه اندازی را برای اطلاعات بیشتر در مورد نحوه مقداردهی اولیه Admin SDK دنبال کنید.

بازیابی اطلاعات کاربر

راه اصلی برای شناسایی یک کاربر توسط uid است، یک شناسه منحصر به فرد برای آن کاربر. Admin 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 Auth Admin مراجعه کنید.

در برخی موارد به جای 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 را برای کاربر مربوط به ایمیل ارائه شده برمی گرداند.

اگر ایمیل ارائه شده متعلق به یک کاربر موجود نباشد یا کاربر به هر دلیل دیگری قابل واکشی نباشد، Admin SDK با خطا مواجه می شود. برای فهرست کامل کدهای خطا، از جمله توضیحات و مراحل حل، به خطاهای API Authentication مدیر مراجعه کنید.

در موارد دیگر، به جای 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 را برای کاربر مربوط به شماره تلفن ارائه شده برمی گرداند.

اگر شماره تلفن ارائه شده متعلق به یک کاربر موجود نباشد یا کاربر به هر دلیل دیگری قابل واکشی نباشد، Admin SDK با خطا مواجه می شود. برای فهرست کامل کدهای خطا، از جمله توضیحات و مراحل حل، به خطاهای API Authentication مدیر مراجعه کنید.

بازیابی انبوه داده های کاربر

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 Authentication مدیر مراجعه کنید.

یک کاربر ایجاد کنید

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 Authentication یک 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 تصادفی به طور خودکار ایجاد می شود. uid های کوتاهتر عملکرد بهتری را ارائه می دهند.
email رشته ایمیل اصلی کاربر باید یک آدرس ایمیل معتبر باشد.
emailVerified بولی آیا ایمیل اصلی کاربر تأیید شده است یا خیر. اگر ارائه نشده باشد، پیش فرض false است.
phoneNumber رشته شماره تلفن اصلی کاربر. باید یک شماره تلفن معتبر مطابق با مشخصات E.164 باشد.
password رشته رمز عبور خام و هش نشده کاربر. باید حداقل شش کاراکتر باشد.
displayName رشته نام نمایشی کاربران
photoURL رشته آدرس عکس کاربر.
disabled بولی این که آیا کاربر غیرفعال است یا خیر. برای افراد ناتوان true . false برای فعال. اگر ارائه نشده باشد، پیش فرض false است.

روش ایجاد کاربر یک شی UserRecord را برای کاربر تازه ایجاد شده برمی گرداند.

اگر uid ، ایمیل یا شماره تلفن ارائه شده قبلاً توسط یک کاربر موجود استفاده می شود یا کاربر به دلیل دیگری نمی تواند ایجاد شود، روش فوق با خطا انجام نمی شود. برای فهرست کامل کدهای خطا، از جمله توضیحات و مراحل حل، به خطاهای API Authentication مدیر مراجعه کنید.

یک کاربر را به روز کنید

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 تنظیم کنید. اگر null نباشد، باید یک URL معتبر باشد.
disabled بولی این که آیا کاربر غیرفعال است یا خیر. برای افراد ناتوان true . false برای فعال.

روش کاربر به‌روزرسانی، یک شی UserRecord به‌روزرسانی شده را پس از تکمیل موفقیت‌آمیز به‌روزرسانی، برمی‌گرداند.

اگر uid ارائه شده با یک کاربر موجود مطابقت نداشته باشد، ایمیل یا شماره تلفن ارائه شده قبلاً توسط یک کاربر موجود استفاده می شود، یا کاربر به هر دلیل دیگری نمی تواند به روز شود، روش فوق با خطا انجام نمی شود. برای فهرست کامل کدهای خطا، از جمله توضیحات و مراحل حل، به خطاهای API Authentication مدیر مراجعه کنید.

حذف یک کاربر

Firebase Admin 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.");

هنگامی که حذف با موفقیت کامل شد، روش حذف کاربر یک نتیجه خالی برمی گرداند.

اگر uid ارائه شده با یک کاربر موجود مطابقت نداشته باشد یا کاربر به هر دلیل دیگری قابل حذف نباشد، روش حذف کاربر خطا می دهد. برای فهرست کامل کدهای خطا، از جمله توضیحات و مراحل حل، به خطاهای API Authentication مدیر مراجعه کنید.

حذف چند کاربر

Firebase Admin SDK همچنین می تواند چندین کاربر را همزمان حذف کند. با این حال، توجه داشته باشید که استفاده از روش‌هایی مانند deleteUsers(uids) برای حذف چند کاربر به طور همزمان، کنترل‌کننده رویداد onDelete() را برای Cloud Functions for 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 Authentication مدیر مراجعه کنید.

لیست همه کاربران

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 Authentication مدیر مراجعه کنید.

هش رمز عبور کاربران لیست شده

در صورتی که حساب کاربری/سرویس مورد استفاده برای ایجاد درخواست توکن دسترسی OAuth دارای مجوز firebaseauth.configs.getHashConfig باشد، این API نیز passwordSalt و passwordHash هش شده توسط باطن Firebase Auth را برای کاربران رمز عبور برمی گرداند. در غیر این صورت passwordHash و passwordSalt تنظیم نمی شوند.

به دلیل ماهیت حساس هش رمز عبور، حساب سرویس Firebase Admin SDK به طور پیش فرض مجوز firebaseauth.configs.getHashConfig را ندارد. نمی‌توانید مجوزی را مستقیماً به حساب کاربری/سرویس اضافه کنید، اما می‌توانید این کار را به‌طور غیرمستقیم با ایجاد یک نقش IAM سفارشی انجام دهید.

برای ایجاد نقش سفارشی IAM:

  1. به صفحه نقش‌ها در IAM و پنل مدیریت در کنسول Google Cloud بروید.
  2. پروژه خود را از منوی کشویی بالای صفحه انتخاب کنید.
  3. روی CREATE ROLE کلیک کنید
  4. روی ADD PERMISSIONs کلیک کنید
  5. مجوز firebaseauth.configs.getHashConfig را جستجو کنید و آن کادر را انتخاب کنید.
  6. روی ADD کلیک کنید
  7. روی CREATE کلیک کنید تا ایجاد نقش جدید به پایان برسد.

نقش سفارشی ایجاد شده را به حساب کاربر/سرویس در صفحه IAM اضافه کنید:

  1. در پنل IAM & admin ، IAM را انتخاب کنید
  2. سرویس یا حساب کاربری را از لیست اعضا برای ویرایش انتخاب کنید.
  3. روی ADD ANOTHER ROLE کلیک کنید.
  4. نقش سفارشی جدیدی که قبلا ایجاد شده را جستجو کنید.
  5. روی ذخیره کلیک کنید.