Pakiet SDK Firebase Admin udostępnia interfejs API do zarządzania użytkownikami Firebase Authentication z podwyższonymi uprawnieniami. Interfejs API do zarządzania użytkownikami o roli administratora umożliwia wykonywanie za pomocą kodu tych zadań w bezpiecznym środowisku serwera:
- Tworzenie nowych użytkowników bez ograniczania szybkości i bez ograniczania szybkości.
- wyszukiwać użytkowników według różnych kryteriów, np. identyfikatora UID, adresu e-mail lub numeru telefonu;
- Wyświetlanie listy wszystkich użytkowników określonego projektu w partiach.
- dostęp do metadanych użytkownika, w tym daty utworzenia konta i ostatniego logowania;
- Usuwanie użytkowników bez konieczności podawania przez nich hasła.
- aktualizować właściwości użytkownika (w tym jego hasło) bez konieczności logowania się jako ten użytkownik;
- weryfikować e-maile bez konieczności korzystania z zewnętrznych procesów weryfikacji e-maili;
- Zmień adres e-mail użytkownika bez wysyłania linków e-mail, aby cofnąć te zmiany.
- Utwórz nowego użytkownika z numerem telefonu bez przechodzenia przez proces weryfikacji SMS-em.
- Zmień numer telefonu użytkownika bez przechodzenia przez proces weryfikacji SMS-em.
- Przeprowadź wstępne konfigurowanie użytkowników offline w wyłączonym stanie, a potem określ, kiedy mają zostać włączeni.
- Tworzenie niestandardowych konsol użytkownika dostosowanych do systemu zarządzania użytkownikami danej aplikacji.
Zanim zaczniesz
Aby korzystać z interfejsu API do zarządzania użytkownikami udostępnianego przez pakiet Firebase Admin SDK, musisz mieć konto usługi. Aby dowiedzieć się więcej o inicjowaniu pakietu Admin SDK, postępuj zgodnie z instrukcjami konfiguracji.
Pobieranie danych użytkownika
Głównym sposobem identyfikowania użytkownika jest uid
, czyli jego unikalny identyfikator. Pakiet Admin SDK udostępnia metodę, która umożliwia pobieranie informacji o profilach użytkowników na podstawie ich 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);
});
Java
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());
Python
from firebase_admin import auth
user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))
Go
// 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}");
Ta metoda zwraca obiekt UserRecord
dla użytkownika odpowiadający wartości uid
przekazanej metodzie.
Jeśli podany identyfikator uid
nie należy do żadnego użytkownika lub nie można go pobrać z jakiegokolwiek innego powodu, podana metoda zwróci błąd.
Pełną listę kodów błędów wraz z opisami i instrukcjami rozwiązywania znajdziesz w artykule Błędy interfejsu Admin Auth API.
W niektórych przypadkach zamiast adresu uid
będziesz mieć adres e-mail użytkownika. Pakiet SDK Firebase Admin obsługuje wyszukiwanie informacji o użytkowniku za pomocą adresu e-mail:
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);
});
Java
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());
Python
from firebase_admin import auth
user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))
Go
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}");
Ta metoda zwraca obiekt UserRecord
użytkownika odpowiadający podanemu adresowi e-mail.
Jeśli podany adres e-mail nie należy do żadnego użytkownika lub nie można go pobrać z jakiegokolwiek innego powodu, pakiet Admin SDK zwraca błąd. Pełną listę kodów błędów, w tym ich opisów i sposobów rozwiązania, znajdziesz w artykule Błędy interfejsu API administracyjnegoAuthentication.
W innych przypadkach zamiast uid
będziesz mieć numer telefonu użytkownika. Pakiet SDK Firebase Admin obsługuje wyszukiwanie informacji o użytkowniku za pomocą numeru telefonu:
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);
});
Java
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());
Python
from firebase_admin import auth
user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))
Go
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}");
Ta metoda zwraca obiekt UserRecord
użytkownika odpowiadający podanemu numerowi telefonu.
Jeśli podany numer telefonu nie należy do żadnego istniejącego użytkownika lub nie można go pobrać z jakiegokolwiek innego powodu, pakiet Admin SDK zwraca błąd. Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu API Authentication.
Zbiorcze pobieranie danych użytkownika
Pakiet Admin SDK Firebase umożliwia też pobieranie listy użytkowników na podstawie podanych przez Ciebie identyfikatorów. Użytkowników możesz identyfikować po ich identyfikatorze, adresie e-mail lub numerze telefonu. W jednym wywołaniu można podać maksymalnie 100 identyfikatorów. Identyfikatory mogą być różnego typu:
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);
});
Java
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);
}
Python
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)
Go
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}");
}
Ta metoda zwraca listę o tej samej wielkości co lista wejściowa, a każdy wpis zawiera albo odpowiednią wartość UserRecord
, albo błąd wskazujący, dlaczego nie udało się odszukać tego identyfikatora. Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu Admin Authentication API.
Tworzenie konta użytkownika
Pakiet Admin SDK udostępnia metodę, która umożliwia utworzenie nowego konta użytkownika Firebase Authentication. Ta metoda akceptuje obiekt zawierający informacje o profilu, które mają zostać uwzględnione na nowo utworzonym koncie użytkownika:
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);
});
Java
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());
Python
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))
Go
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}");
Domyślnie Firebase Authentication wygeneruje losowe uid
dla nowego użytkownika. Jeśli chcesz zamiast tego podać własny parametr uid
dla nowego użytkownika, możesz go podać jako argument przekazany metodzie tworzenia użytkownika:
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);
});
Java
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());
Python
user = auth.create_user(
uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))
Go
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}");
Można podać dowolną kombinację tych właściwości:
Tabela 1. Właściwości obsługiwane przez operację tworzenia użytkownika
Właściwość | Typ | Opis |
---|---|---|
uid |
ciąg znaków |
uid , który chcesz przypisać nowo utworzonemu użytkownikowi. Musi być ciągiem znaków o długości od 1 do 128 znaków (włącznie). Jeśli nie podasz identyfikatora, automatycznie wygenerujemy losowy identyfikator uid . Krótsze uid zapewniają lepszą wydajność.
|
email |
ciąg znaków | Podstawowy adres e-mail użytkownika. Wymagany jest prawidłowy adres e-mail. |
emailVerified |
wartość logiczna |
Określa, czy podstawowy adres e-mail użytkownika jest zweryfikowany. Jeśli nie podasz żadnej opcji, zostanie użyta wartość domyślna false .
|
phoneNumber |
ciąg znaków | Główny numer telefonu użytkownika. Musi to być prawidłowy numer telefonu zgodny ze specyfikacją E.164. |
password |
ciąg znaków | Niezaszyfrowane hasło użytkownika. Musi składać się z co najmniej 6 znaków. |
displayName |
ciąg znaków | Wyświetlana nazwa użytkowników. |
photoURL |
ciąg znaków | Adres URL zdjęcia użytkownika. |
disabled |
wartość logiczna |
Wskazuje, czy konto użytkownika jest wyłączone. true – wyłączone;
false – włączone. Jeśli nie podasz żadnej opcji, domyślna wartość to false .
|
Metoda tworzenia użytkownika zwraca obiekt UserRecord
dla nowo utworzonego użytkownika.
Jeśli podany uid
, adres e-mail lub numer telefonu jest już używany przez istniejącego użytkownika lub nie można utworzyć użytkownika z innego powodu, powyższa metoda zakończy się niepowodzeniem z błędem. Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu API dla administratorówAuthentication.
Aktualizowanie użytkownika
Pakiet SDK Firebase Admin ułatwia modyfikowanie danych istniejącego użytkownika. Musisz podać uid
oraz właściwości, które chcesz zaktualizować dla tego użytkownika:
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);
});
Java
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());
Python
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))
Go
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}");
Można podać dowolną kombinację tych właściwości:
Tabela 2. Właściwości obsługiwane przez operację aktualizacji użytkownika
Właściwość | Typ | Opis |
---|---|---|
email |
ciąg znaków | Nowy podstawowy adres e-mail użytkownika. Wymagany jest prawidłowy adres e-mail. |
emailVerified |
wartość logiczna |
Określa, czy podstawowy adres e-mail użytkownika jest zweryfikowany. Jeśli nie podasz żadnej opcji, zostanie użyta wartość domyślna false .
|
phoneNumber |
ciąg znaków |
Nowy główny numer telefonu użytkownika. Musi to być prawidłowy numer telefonu zgodny ze specyfikacją E.164. Ustaw na null , aby usunąć istniejący numer telefonu użytkownika.
|
password |
ciąg znaków | Nowe hasło użytkownika w postaci zwykłego tekstu, bez szyfrowania. Musi składać się z co najmniej 6 znaków. |
displayName |
ciąg znaków | null |
Nowa wyświetlana nazwa użytkowników. Ustaw na null , aby wyczyścić wyświetlaną nazwę użytkownika.
|
photoURL |
ciąg znaków | null |
Nowy adres URL zdjęcia użytkownika. Ustaw na null , aby wyczyścić obecny adres URL zdjęcia użytkownika. Jeśli nie jest to null , musi być prawidłowym adresem URL.
|
disabled |
wartość logiczna |
Wskazuje, czy konto użytkownika jest wyłączone. true – wyłączone;
false – włączone.
|
Metoda update user zwraca zaktualizowany obiekt UserRecord
, gdy aktualizacja zakończy się pomyślnie.
Jeśli podany identyfikator uid
nie odpowiada identyfikatorowi istniejącego użytkownika, podany adres e-mail lub numer telefonu jest już używany przez istniejącego użytkownika lub nie można zaktualizować użytkownika z jakiegokolwiek innego powodu, powyższa metoda zakończy się niepowodzeniem z błędem. Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu Admin Authentication API.
Usuwanie użytkownika
Pakiet Firebase Admin SDK umożliwia usuwanie istniejących użytkowników według uid
:
Node.js
getAuth()
.deleteUser(uid)
.then(() => {
console.log('Successfully deleted user');
})
.catch((error) => {
console.log('Error deleting user:', error);
});
Java
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
Python
auth.delete_user(uid)
print('Successfully deleted user')
Go
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.");
Metoda delete user zwraca pusty wynik, gdy usunięcie zostanie zakończone.
Jeśli podany identyfikator uid
nie odpowiada istniejącej osobie lub nie można usunąć użytkownika z jakiegokolwiek innego powodu, metoda delete user zwraca błąd.
Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu API Authentication.
Usuwanie wielu użytkowników
Pakiet Admin SDK Firebase umożliwia też usuwanie wielu użytkowników naraz. Pamiętaj jednak, że użycie metody takiej jak deleteUsers(uids)
do usunięcia wielu użytkowników jednocześnie nie spowoduje wywołania metody obsługi zdarzenia onDelete()
w przypadku Cloud Functions for Firebase.
Dzieje się tak, ponieważ zbiorcze usunięcie nie powoduje utworzenia zdarzenia usunięcia użytkownika w przypadku każdego z nich. Usuwaj użytkowników pojedynczo, jeśli chcesz, aby zdarzenia usuwania użytkowników były wywoływane w przypadku każdego usuniętego konta.
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);
});
Java
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());
}
Python
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))
Go
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}");
}
Metoda delete users zwraca listę niepowodzeń dotyczących użytkowników, których nie udało się usunąć. Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu API Authentication.
Wyświetlanie wszystkich użytkowników
Pakiet Admin SDK Firebase umożliwia pobieranie całej listy użytkowników w partiach:
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();
Java
// 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());
}
Python
# 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)
Go
// 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}");
}
Każda partia wyników zawiera listę użytkowników i token następnej strony, który służy do wyświetlania kolejnej partii użytkowników. Gdy wszyscy użytkownicy są już wymienieni, nie jest zwracana żadna wartośćpageToken
.
Jeśli nie podasz pola maxResults
, zostanie użyta domyślna wartość 1000 użytkowników na partię.
Jest to też maksymalna liczba użytkowników, których można wyświetlić na liście jednocześnie. Każda wartość większa od maksymalnej spowoduje błąd argumentu.
Jeśli nie określisz pola pageToken
, operacja wyświetli listę użytkowników od początku, posortowaną według pola uid
.
Pełną listę kodów błędów, w tym ich opisy i sposoby rozwiązywania, znajdziesz w artykule Błędy interfejsu API Authentication.
Hasze haseł wymienionych użytkowników
Ten interfejs API zwraca też zaszyfrowane przez backend Firebase Auth wartości passwordSalt
i passwordHash
w przypadku użytkowników z hasłem, jeśli konto użytkownika lub usługi użyte do wygenerowania tokena dostępu OAuth w prośbie ma uprawnienie firebaseauth.configs.getHashConfig
. W przeciwnym razie wartości passwordHash
i passwordSalt
nie zostaną ustawione.
Ze względu na poufny charakter haszy haseł konto usługi pakietu Firebase Admin SDK nie ma domyślnie uprawnień firebaseauth.configs.getHashConfig
. Nie możesz dodać uprawnienia bezpośrednio do konta użytkownika lub konta usługi, ale możesz to zrobić pośrednio, utworz niestandardową rolę uprawnień IAM.
Aby utworzyć niestandardową rolę uprawnień:
- W konsoli Google Cloud otwórz stronę Role (Role) w panelu Administracja.
- Wybierz projekt z menu u góry strony.
- Kliknij UTWÓRZ ROLĘ.
- Kliknij DODAJ UPRAWNIENIA.
- Wyszukaj uprawnienie
firebaseauth.configs.getHashConfig
i zaznacz to pole wyboru. - Kliknij DODAJ.
- Aby zakończyć tworzenie nowej roli, kliknij UTWÓRZ.
Na stronie Uprawnienia dodaj utworzoną rolę niestandardową do konta użytkownika lub usługi:
- W panelu Administracja kliknij Uprawnienia.
- Na liście członków wybierz konto usługi lub użytkownika, które chcesz edytować.
- Kliknij DODAJ KOLEJNĄ ROLĘ.
- Wyszukaj nową utworzoną wcześniej rolę niestandardową.
- Kliknij ZAPISZ.