Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

נהל משתמשים

ה- SDK של מנהל ה- Firebase מספק ממשק API לניהול המשתמשים שלך באימות Firebase עם הרשאות גבוהות. ממשק ה- API לניהול משתמשים של מנהל מערכת מאפשר לך להשלים באופן תכנותי את המשימות הבאות מסביבת שרת מאובטחת:

  • צור משתמשים חדשים ללא כל חנק או הגבלת קצב.
  • חפש משתמשים לפי קריטריונים שונים כגון uid, דוא"ל או מספר טלפון.
  • ציין את כל המשתמשים בפרויקט שצוין באצוות.
  • גישה למטא נתונים של המשתמש כולל תאריך יצירת החשבון ותאריך הכניסה האחרון.
  • מחק משתמשים מבלי לדרוש מהסיסמה הקיימת שלהם.
  • עדכן את מאפייני המשתמש - כולל הסיסמה שלהם - מבלי שתצטרך להיכנס כמשתמש.
  • אמת אימיילים מבלי שתצטרך לעבור את זרמי הפעולה מחוץ לתחום לאימות אימיילים.
  • שנה את דוא"ל המשתמש מבלי לשלוח קישורי דוא"ל כדי לבטל שינויים אלה.
  • צור משתמש חדש עם מספר טלפון מבלי לעבור על זרימת אימות ה- SMS.
  • שנה את מספר הטלפון של המשתמש מבלי לעבור על זרימת אימות ה- SMS.
  • משתמשי אספקה ​​לא מקוונים במצב מושבת ואז מאוחר יותר שולטים מתי להפעיל אותם.
  • בנה קונסולות משתמש מותאמות אישית המותאמות למערכת ניהול המשתמשים של יישום ספציפי.

לפני שאתה מתחיל

כדי להשתמש בממשק ה- API לניהול משתמשים שמספק ה- SDK למנהל המערכת של Firebase, עליך להיות בעל חשבון שירות. עקוב אחר הוראות ההתקנה למידע נוסף על האתחול של ה- SDK לניהול המערכת.

אחזר נתוני משתמשים

הדרך העיקרית לזהות משתמש היא על ידי ה- uid שלהם, מזהה ייחודי עבור אותו משתמש. ה- Admin SDK מספק שיטה המאפשרת לאסוף את פרטי הפרופיל של המשתמשים לפי ה- uid שלהם:

Node.js

admin
  .auth()
  .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)

C #

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 אובייקט UserRecord המתאים ל- uid המסופק לשיטה.

אם ה- uid שסופק אינו שייך למשתמש קיים או שלא ניתן לאחזר את המשתמש מסיבה אחרת, השיטה שלעיל מטילה שגיאה. לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API של מנהל מערכת .

במקרים מסוימים יהיה לך דוא"ל של משתמש במקום ה- uid . ה- SDK של מנהל המערכת של Firebase תומך בחיפוש פרטי משתמש באמצעות דוא"ל:

Node.js

admin
  .auth()
  .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)

C #

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 אובייקט UserRecord המתאים לדוא"ל שסופק.

אם הדוא"ל שסופק אינו שייך למשתמש קיים או שלא ניתן לאחזר את המשתמש מסיבה אחרת, ה- SDK של מנהל המערכת מציג שגיאה. לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API לאימות מנהל מערכת .

במקרים אחרים יהיה לך מספר הטלפון של המשתמש במקום ה- uid . ה- SDK של מנהל המערכת של Firebase תומך בחיפוש פרטי משתמש עם מספר טלפון:

Node.js

admin
  .auth()
  .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)

C #

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 אובייקט UserRecord המתאים למספר הטלפון שסופק.

אם מספר הטלפון שסופק אינו שייך למשתמש קיים או שלא ניתן לאחזר את המשתמש מסיבה אחרת, ה- SDK של מנהל המערכת מציג שגיאה. לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API לאימות מנהל מערכת .

אחזור נתוני משתמשים בכמות גדולה

ה- SDK של מנהל ה- Firebase מאפשר גם אחזור רשימת משתמשים בהתבסס על מזהים שאתה מספק. אתה יכול לזהות משתמשים על ידי מזהה המשתמש, הדוא"ל או מספר הטלפון שלהם. ניתן לספק מקסימום 100 מזהים בשיחה אחת. מזהים יכולים להכיל שילוב של סוגים:

Node.js

admin
  .auth()
  .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)
}

C #

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 לאימות מנהל מערכת .

צור משתמש

מנהל ה- SDK מספק שיטה המאפשרת ליצור משתמש חדש לאימות Firebase. שיטה זו מקבלת אובייקט המכיל את פרטי הפרופיל שייכלל בחשבון המשתמש החדש שנוצר:

Node.js

admin
  .auth()
  .createUser({
    email: 'user@example.com',
    emailVerified: false,
    phoneNumber: '+11234567890',
    password: 'secretPassword',
    displayName: 'John Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: false,
  })
  .then((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)

C #

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

כברירת מחדל, Firebase האימות תפיק אקראית uid עבור המשתמש החדש. אם במקום זאת תרצה לציין את ה- uid שלך עבור המשתמש החדש, תוכל לכלול את הארגומנט המועבר לשיטת יצירת המשתמש:

Node.js

admin
  .auth()
  .createUser({
    uid: 'some-uid',
    email: 'user@example.com',
    phoneNumber: '+11234567890',
  })
  .then((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)

C #

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 חוּט כתובת האתר של המשתמש.
disabled בוליאני בין אם המשתמש מושבת או לא. true לנכים; false עבור מופעל. אם לא מסופק, ברירת המחדל היא false .

שיטת יצירת המשתמש מחזירה אובייקט UserRecord עבור המשתמש החדש שנוצר.

אם ה- uid , הדוא"ל או מספר הטלפון שסופק כבר בשימוש על ידי משתמש קיים או שלא ניתן ליצור את המשתמש מסיבה אחרת, השיטה שלעיל נכשלת עם שגיאה. לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API לאימות מנהל מערכת .

עדכן משתמש

ה- SDK של מנהל ה- Firebase מאפשר שינוי של נתונים של משתמש קיים. אתה צריך לציין uid יחד עם נכסי עדכון עבור משתמש זה:

Node.js

admin
  .auth()
  .updateUser(uid, {
    email: 'modifiedUser@example.com',
    phoneNumber: '+11234567890',
    emailVerified: true,
    password: 'newPassword',
    displayName: 'Jane Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: true,
  })
  .then((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)

C #

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 כתובת האתר החדשה של המשתמשים. הגדר null כדי למחוק את כתובת האתר הקיימת של המשתמש. אם אינו null , חייב להיות כתובת אתר תקפה.
disabled בוליאני בין אם המשתמש מושבת או לא. true לנכים; false עבור מופעל.

שיטת משתמש העדכון מחזירה אובייקט UserRecord מעודכן כאשר העדכון מסתיים בהצלחה.

אם ה- uid המסופק אינו תואם למשתמש קיים, הדוא"ל או מספר הטלפון שסופקו כבר נמצאים בשימוש על ידי משתמש קיים, או שלא ניתן לעדכן את המשתמש מסיבה אחרת, השיטה הנ"ל נכשלת עם שגיאה. לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API לאימות מנהל מערכת .

מחק משתמש

ה- Firebase Admin SDK מאפשר למחוק משתמשים קיימים לפי ה- uid שלהם:

Node.js

admin
  .auth()
  .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)

C #

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

שיטת המשתמש למחוק מחזירה תוצאה ריקה כאשר המחיקה הושלמה בהצלחה.

אם ה- uid המסופק אינו תואם למשתמש קיים או שלא ניתן למחוק את המשתמש מסיבה אחרת, שיטת המשתמש למחוק מביאה שגיאה. לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API לאימות מנהל מערכת .

מחק משתמשים מרובים

ה- Firebase Admin SDK יכול גם למחוק מספר משתמשים בו זמנית. עם זאת, שים לב כי שימוש בשיטות כמו deleteUsers(uids) למחיקת מספר משתמשים בו זמנית לא יפעיל מטפלי אירועים onDelete() עבור פונקציות ענן עבור Firebase. הסיבה לכך היא שמחיקת אצווה אינה מפעילה אירוע מחיקת משתמשים בכל משתמש. מחק משתמשים בזה אחר זה אם ברצונך שאירועי מחיקת משתמשים יופעלו עבור כל משתמש שנמחק.

Node.js

admin
  .auth()
  .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)
}

C #

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 לאימות מנהל מערכת .

רשום את כל המשתמשים

SDK מנהל המערכת של Firebase מאפשר לאחזר את כל רשימת המשתמשים בקבוצות:

Node.js

const listAllUsers = (nextPageToken) => {
  // List batch of users, 1000 at a time.
  admin
    .auth()
    .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
	}
}

C #

// 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 שום דף- pageToken .

אם לא maxResults שדה maxResults , נעשה שימוש בברירת המחדל של 1000 משתמשים לאצווה. זהו גם המספר המרבי של משתמשים שמותר לרשום בו זמנית. כל ערך גדול מהמקסימום יפיל שגיאת טיעון. אם לא pageToken , הפעולה תציג רשימת משתמשים מההתחלה, לפי סדר ה- uid .

לקבלת רשימה מלאה של קודי שגיאה, כולל תיאורים ושלבי רזולוציה, ראה שגיאות ממשק API לאימות מנהל מערכת .

חשיפת סיסמאות של משתמשים רשומים

ממשק API זה מחזיר גם את passwordSalt Salt ו- passwordHash ידי גיבוי האש של Firebase Auth עבור משתמשי סיסמאות אם חשבון המשתמש / שירות המשמש ליצירת אסימון הגישה של OAuth יש הרשאת firebaseauth.configs.getHashConfig . אחרת passwordHash Hash passwordHash passwordSalt לא יוגדרו.

בשל האופי הרגיש של חשיפת סיסמאות, לחשבון שירות ה- SDK של מנהל ה- Firebase אין הרשאת firebaseauth.configs.getHashConfig כברירת מחדל. אינך יכול להוסיף הרשאה ישירות לחשבון משתמש / שירות, אך תוכל לעשות זאת בעקיפין על ידי יצירת תפקיד IAM מותאם אישית .

כדי ליצור את תפקיד ה- IAM המותאם אישית:

  1. עבור לדף התפקידים בחלונית IAM & admin במסוף ענן Google.
  2. בחר את הפרויקט שלך מהתפריט הנפתח שבראש הדף.
  3. לחץ על צור תפקיד
  4. לחץ על הוסף הרשאות
  5. חפש הרשאה firebaseauth.configs.getHashConfig ובחר תיבת סימון זו.
  6. לחץ על הוסף
  7. לחץ על צור כדי לסיים את יצירת התפקיד החדש.

הוסף את התפקיד המותאם אישית שנוצר לחשבון המשתמש / השירות בדף IAM:

  1. בחלונית IAM & admin , בחר IAM
  2. בחר את השירות או חשבון המשתמש מרשימת החברים לעריכה.
  3. לחץ על הוסף תפקיד אחר .
  4. חפש את התפקיד המותאם אישית החדש שנוצר בעבר.
  5. לחץ על שמור .