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

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

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

قبل از شروع

برای استفاده از API مدیریت کاربر ارائه‌شده توسط Firebase Admin 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(f'Successfully fetched user data: {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

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(f'Successfully fetched user data: {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 خطایی را نشان می‌دهد. برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل‌وفصل، به خطاهای Admin Authentication 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(f'Successfully fetched user data: {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 خطایی را نشان می‌دهد. برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل‌وفصل، به خطاهای Admin Authentication API مراجعه کنید.

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

Firebase Admin SDK همچنین امکان بازیابی فهرست کاربران را براساس شناسه‌هایی که ارائه می‌دهید فراهم می‌کند. می‌توانید کاربران را با شناسه کاربر، ایمیل، یا شماره تلفن آن‌ها شناسایی کنید. حداکثر ۱۰۰ شناسه را می‌توان در یک تماس ارائه کرد. شناسه‌ها می‌توانند ترکیبی از انواع مختلف باشند:

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 مربوطه است یا خطایی که نشان می‌دهد چرا آن شناسه قابل جستجو نبوده است. برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل مشکل، به خطاهای Authentication API سرپرست مراجعه کنید.

ایجاد کاربر

«سرپرست 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(f'Sucessfully created new user: {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(f'Sucessfully created new user: {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}");

هر ترکیبی از ویژگی‌های زیر را می‌توان ارائه کرد:

جدول ۱. مشخصه‌های پشتیبانی‌شده توسط عملیات ایجاد کاربر

دارایی نوع شرح
uid رشته uid برای اختصاص دادن به کاربر تازه ایجادشده. باید رشته‌ای بین ۱ تا ۱۲۸ نویسه باشد. اگر ارائه نشود، uid تصادفی به‌طور خودکار تولید خواهد شد. uidهای کوتاه‌تر عملکرد بهتری ارائه می‌دهند.
email رشته ایمیل اصلی کاربر. باید نشانی ایمیل معتبری باشد.
emailVerified بولی آیا ایمیل اصلی کاربر تأیید شده است یا نه. اگر ارائه نشود، پیش‌فرض false است.
phoneNumber رشته شماره تلفن اصلی کاربر. باید شماره تلفن معتبر مطابق با مشخصات E.164 باشد.
password رشته گذرواژه خام و درهم‌سازی‌نشده کاربر. باید حداقل شش نویسه داشته باشد.
displayName رشته نام نمایشی کاربر.
photoURL رشته نشانی وب عکس کاربر.
disabled بولی اینکه کاربر غیرفعال است یا نه. true برای غیرفعال؛ false برای فعال. اگر ارائه نشود، پیش‌فرض false است.

روش ایجاد کاربر، شیء UserRecord را برای کاربر جدیداً ایجادشده برمی‌گرداند.

اگر uid، ایمیل، یا شماره تلفن ارائه‌شده قبلاً توسط کاربر موجودی استفاده شده باشد یا کاربر به هر دلیل دیگری نتواند ایجاد شود، روش بالا با خطا مواجه می‌شود. برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل مشکل، به خطاهای Authentication 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(f'Sucessfully updated user: {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}");

هر ترکیبی از ویژگی‌های زیر را می‌توان ارائه کرد:

جدول ۲. ویژگی‌های پشتیبانی‌شده توسط عملیات به‌روزرسانی کاربر

دارایی نوع شرح
email رشته ایمیل اصلی جدید کاربر. باید نشانی ایمیل معتبری باشد.
emailVerified بولی آیا ایمیل اصلی کاربر تأیید شده است یا نه. اگر ارائه نشده باشد، پیش‌فرض false است.
phoneNumber رشته | null شماره تلفن اصلی جدید کاربر. باید شماره تلفن معتبر مطابق با مشخصات E.164 باشد. برای پاک کردن شماره تلفن موجود کاربر، روی null تنظیم کنید.
password رشته گذرواژه جدید خام و درهم‌نشده کاربر. باید حداقل شش نویسه داشته باشد.
displayName رشته | null نام نمایشی جدید کاربر. روی null تنظیم کنید تا نام نمایشی موجود کاربر پاک شود.
photoURL رشته | null نشانی وب عکس جدید کاربر. برای پاک کردن نشانی وب عکس موجود کاربر، روی null تنظیم کنید. اگر غیرnull باشد، باید نشانی وب معتبری باشد.
disabled بولی اینکه کاربر غیرفعال است یا نه. true برای غیرفعال؛ false برای فعال.

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

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

حذف کاربر

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 ارائه‌شده با کاربر موجود مطابقت نداشته باشد یا کاربر به هر دلیل دیگری قابل‌حذف نباشد، روش حذف کاربر خطا ایجاد می‌کند. برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل‌وفصل، به خطاهای Admin Authentication API مراجعه کنید.

حذف چند کاربر

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(f'Successfully deleted {result.success_count} users')
print(f'Failed to delete {result.failure_count} users')
for err in result.errors:
    print(f'error #{result.index}, reason: {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}");
}

روش حذف کاربران فهرستی از موارد ناموفق را برای کاربرانی که حذف آن‌ها امکان‌پذیر نبوده است برمی‌گرداند. برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل‌وفصل، به خطاهای Admin Authentication 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 مشخص نشده باشد، مقدار پیش‌فرض ۱۰۰۰ کاربر در هر دسته استفاده می‌شود. این تعداد همچنین حداکثر تعداد کاربرانی است که می‌توانند به‌طور هم‌زمان فهرست شوند. هر مقداری که بزرگ‌تر از حداکثر باشد، خطای آرگومان ایجاد می‌کند. اگر هیچ pageToken مشخص نشده باشد، عملیات کاربران را از ابتدا فهرست می‌کند، که براساس uid مرتب شده‌اند.

برای مشاهده فهرست کامل کدهای خطا، ازجمله شرح و مراحل حل‌وفصل، به خطاهای میانای برنامه‌سازی کاربردی Authentication Admin مراجعه کنید.

درهم‌سازی گذرواژه کاربران فهرست‌شده

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

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

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

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

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

  1. در پانل IAM و سرپرست، IAM را انتخاب کنید
  2. حساب کاربری یا سرویس را از فهرست اعضا برای ویرایش انتخاب کنید.
  3. روی افزودن نقش دیگر کلیک کنید.
  4. نقش سفارشی جدیدی را که قبلاً ایجاد کرده‌اید جستجو کنید.
  5. روی ذخیره کردن کلیک کنید.