נהל משתמשים

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

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

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

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

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

הדרך העיקרית כדי לזהות משתמש היא על ידי שלהם uid , מזהה ייחודי עבור המשתמש. 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 אובייקט עבור המשתמש המתאים uid הניתן השיטה.

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

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

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

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

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

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

SDK Admin של 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 Authentication Admin .

צור משתמש

ה- 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 Authentication Admin .

עדכן משתמש

ה- 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 Authentication Admin .

מחק משתמש

ה- SDK Admin Firebase מאפשרת למחוק משתמשים קיימים ידי שלהם 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 Authentication Admin .

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

ה- 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 Authentication Admin .

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

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 מוחזר.

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

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

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

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

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

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

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

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

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