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

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

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

قبل از اینکه شروع کنی

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

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

روش اصلی برای شناسایی یک کاربر، استفاده از uid او است که یک شناسه منحصر به فرد برای آن کاربر است. Admin SDK روشی را ارائه می‌دهد که امکان دریافت اطلاعات پروفایل کاربران را از طریق uid آنها فراهم می‌کند:

نود جی اس

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

در برخی موارد، به جای شناسه کاربری uid ، ایمیل کاربر را خواهید داشت. کیت توسعه نرم‌افزاری مدیریت فایربیس (Firebase Admin SDK) از جستجوی اطلاعات کاربر با ایمیل پشتیبانی می‌کند:

نود جی اس

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

در موارد دیگر، به جای uid کاربر، شماره تلفن او را خواهید داشت. Firebase Admin SDK از جستجوی اطلاعات کاربر با شماره تلفن پشتیبانی می‌کند:

نود جی اس

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

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

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

نود جی اس

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 ایجاد کنید. این روش یک شیء حاوی اطلاعات پروفایل را برای گنجاندن در حساب کاربری تازه ایجاد شده می‌پذیرد:

نود جی اس

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 خودتان را برای کاربر جدید مشخص کنید، می‌توانید آن را به عنوان آرگومانی که به متد ایجاد کاربر ارسال می‌شود، وارد کنید:

نود جی اس

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

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

کیت توسعه نرم‌افزار (SDK) مدیریت فایربیس، تغییر داده‌های یک کاربر موجود را تسهیل می‌کند. برای به‌روزرسانی آن کاربر، باید یک uid به همراه ویژگی‌های آن مشخص کنید:

نود جی اس

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 .

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

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

حذف یک کاربر

کیت توسعه نرم‌افزاری مدیریت فایربیس (Firebase Admin SDK) امکان حذف کاربران موجود را بر اساس شناسه کاربری uid آنها فراهم می‌کند:

نود جی اس

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

حذف چندین کاربر

کیت توسعه نرم‌افزاری مدیریت فایربیس (Firebase Admin SDK) همچنین می‌تواند چندین کاربر را به طور همزمان حذف کند. با این حال، توجه داشته باشید که استفاده از روش‌هایی مانند deleteUsers(uids) برای حذف همزمان چندین کاربر، باعث فعال شدن رویداد onDelete() برای Cloud Functions for Firebase نمی‌شود. دلیل این امر این است که حذف دسته‌ای، رویداد حذف کاربر را برای هر کاربر فعال نمی‌کند. اگر می‌خواهید رویدادهای حذف کاربر برای هر کاربر حذف شده فعال شود، کاربران را یکی یکی حذف کنید.

نود جی اس

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

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

فهرست کردن همه کاربران

کیت توسعه نرم‌افزاری مدیریت فایربیس (Firebase Admin SDK) امکان بازیابی کل لیست کاربران را به صورت دسته‌ای فراهم می‌کند:

نود جی اس

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 فهرست می‌کند.

برای مشاهده لیست کامل کدهای خطا، شامل توضیحات و مراحل رفع آنها، به خطاهای API Authentication مدیر مراجعه کنید.

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

این API همچنین passwordSalt و passwordHash هش شده توسط backend 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. برای تکمیل ایجاد نقش جدید، روی CREATE کلیک کنید.

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

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