Firebase Admin SDK には、管理者権限で Firebase Authentication ユーザーを管理するための API が用意されています。この Admin User Management API では、安全なサーバー環境からプログラムによって次のタスクを行うことができます。
- スロットリングまたはレートの制限なしで新しいユーザーを作成する。
- uid、メールアドレス、電話番号などのさまざまな条件でユーザーを検索する。
- 指定したプロジェクトのすべてのユーザーをバッチでリストする。
- アカウントの作成日、最終ログイン日などのユーザー メタデータにアクセスする。
- ユーザーの現在のパスワードを入力することなく、そのユーザーを削除する。
- パスワードなどのユーザー プロパティを、そのユーザーとしてログインすることなく更新する。
- メール確認の帯域外アクション フローを実行することなくメールを確認する。
- 変更を取り消すメールリンクを送信することなく、ユーザーのメールを変更する。
- SMS 検証フローを実行することなく、電話番号を持つ新しいユーザーを作成する。
- SMS 検証フローを実行することなくユーザーの電話番号を変更する。
- 無効状態のユーザーをオフラインでプロビジョニングして、有効にするタイミングを後で制御する。
- 特定のアプリケーションのユーザー管理システムに応じたカスタム ユーザー コンソールをビルドする。
始める前に
Firebase Admin SDK に用意されているユーザー管理 API を使用するには、サービス アカウントが必要です。Admin SDK を初期化する方法の詳細については、設定手順をご覧ください。
ユーザーデータを取得する
ユーザーを特定するには、主に、そのユーザーの uid
(一意の識別子)を使用します。Admin SDK は、uid
によってユーザーのプロフィール情報を取得するメソッドを提供します。
Node.js
getAuth()
.getUser(uid)
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
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}");
このメソッドは、指定された uid
に対応するユーザーの UserRecord
オブジェクトを返します。
指定された uid
が既存のユーザーに属していない場合や、他の理由でユーザーを取得できない場合、上記のメソッドはエラーをスローします。エラーコードとその説明、および解決手順を含む完全な一覧については、Admin Authentication API エラーをご覧ください。
場合によっては、ユーザーの uid
ではなく、メールアドレスが提供されることがあります。Firebase Admin SDK では、メールアドレスによるユーザー情報の検索がサポートされています。
Node.js
getAuth()
.getUserByEmail(email)
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
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}");
このメソッドは、指定されたメールアドレスに対応するユーザーの UserRecord
オブジェクトを返します。
指定されたメールアドレスが既存のユーザーに属していない場合や、他の理由でユーザーを取得できない場合、Admin SDK はエラーをスローします。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
それ以外の場合は、ユーザーの uid
ではなく、電話番号が提供されます。Firebase Admin SDK では、電話番号によるユーザー情報の検索がサポートされています。
Node.js
getAuth()
.getUserByPhoneNumber(phoneNumber)
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
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}");
このメソッドは、指定された電話番号に対応するユーザーの UserRecord
オブジェクトを返します。
指定された電話番号が既存のユーザーに属していない場合や、その他の理由でユーザーを取得できない場合、Admin SDK はエラーをスローします。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
ユーザーデータを一括で取得する
Firebase Admin SDK では、指定した ID に基づいてユーザーのリストを取得することもできます。ユーザーは、ユーザー ID、メールアドレス、電話番号で識別できます。1 回の呼び出しで最大 100 個の ID を指定できます。ID には、複数のタイプを混在させて含めることができます。
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}");
}
このメソッドは、入力リストとサイズが同じであるリストを返します。各エントリには、対応する UserRecord
が含まれるか、その ID が見つからなかった理由を示すエラーが含まれます。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
ユーザーを作成する
Admin SDK は、新しい Firebase Authentication ユーザーを作成するメソッドを提供します。このメソッドは、新しく作成されたユーザー アカウントに含めるプロフィール情報を含むオブジェクトを受け入れます。
Node.js
getAuth()
.createUser({
email: 'user@example.com',
emailVerified: false,
phoneNumber: '+11234567890',
password: 'secretPassword',
displayName: 'John Doe',
photoURL: 'http://www.example.com/12345678/photo.png',
disabled: false,
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully created new user:', userRecord.uid);
})
.catch((error) => {
console.log('Error creating new user:', error);
});
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}");
デフォルトでは、新しいユーザー用のランダムな uid
がFirebase Authentication によって生成されます。新しいユーザーに対して独自の uid
を指定するには、ユーザー作成メソッドに渡される引数としてその uid を追加します。
Node.js
getAuth()
.createUser({
uid: 'some-uid',
email: 'user@example.com',
phoneNumber: '+11234567890',
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully created new user:', userRecord.uid);
})
.catch((error) => {
console.log('Error creating new user:', error);
});
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}");
次のプロパティを任意に組み合わせて指定できます。
表 1. ユーザー作成オペレーションでサポートされているプロパティ
プロパティ | タイプ | 説明 |
---|---|---|
uid |
文字列 |
新しく作成されたユーザーに割り当てる uid 。長さが 1~128 文字の文字列にする必要があります。指定されていない場合は、uid が自動的に生成されます。uid が短いほどパフォーマンスが向上します。
|
email |
文字列 | ユーザーのプライマリ メールアドレス。有効なメールアドレスを指定してください。 |
emailVerified |
ブール値 |
ユーザーのプライマリ メールアドレスが確認されているかどうか。指定されていない場合、デフォルト値は false です。 |
phoneNumber |
文字列 | ユーザーのメインの電話番号。有効な E.164 仕様準拠の電話番号を指定してください。 |
password |
文字列 | ユーザーのハッシュ解除された未加工のパスワード。6 文字以上で指定してください。 |
displayName |
文字列 | ユーザーの表示名。 |
photoURL |
文字列 | ユーザーの写真 URL。 |
disabled |
ブール値 |
ユーザーが無効かどうか。無効の場合は true 、有効の場合は false です。指定されていない場合、デフォルト値は false です。 |
ユーザー作成メソッドは、新しく作成されたユーザーの UserRecord
オブジェクトを返します。
指定された uid
、メールアドレス、電話番号が既存のユーザーによって使用されている場合、またはその他の理由でユーザーを作成できない場合、上記のメソッドはエラーで失敗します。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
ユーザーを更新する
Firebase Admin SDK を使用すると、既存のユーザーのデータを簡単に変更できます。ユーザーの更新するプロパティとともに uid
を指定する必要があります。
Node.js
getAuth()
.updateUser(uid, {
email: 'modifiedUser@example.com',
phoneNumber: '+11234567890',
emailVerified: true,
password: 'newPassword',
displayName: 'Jane Doe',
photoURL: 'http://www.example.com/12345678/photo.png',
disabled: true,
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully updated user', userRecord.toJSON());
})
.catch((error) => {
console.log('Error updating user:', error);
});
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}");
次のプロパティを任意に組み合わせて指定できます。
表 2. ユーザー更新オペレーションでサポートされているプロパティ
プロパティ | タイプ | 説明 |
---|---|---|
email |
文字列 | ユーザーの新しいプライマリ メールアドレス。有効なメールアドレスを指定してください。 |
emailVerified |
ブール値 |
ユーザーのプライマリ メールアドレスが確認されているかどうか。指定されていない場合、デフォルト値は false です。 |
phoneNumber |
文字列 |
ユーザーの新しいメインの電話番号。有効な E.164 仕様準拠の電話番号を指定してください。null を設定すると、ユーザーの既存の電話番号がクリアされます。 |
password |
文字列 | ユーザーのハッシュ解除された未加工のパスワード。6 文字以上で指定してください。 |
displayName |
文字列 | null |
ユーザーの新しい表示名。null を設定すると、ユーザーの既存の表示名がクリアされます。 |
photoURL |
文字列 | null |
ユーザーの新しい写真 URL。null を設定すると、ユーザーの既存の写真 URL がクリアされます。null 以外の場合は、有効な URL である必要があります。 |
disabled |
ブール値 |
ユーザーが無効かどうか。無効の場合は true 、有効の場合は false です。 |
ユーザー更新メソッドは、更新が適切に行われたときに、更新された UserRecord
オブジェクトを返します。
指定された uid
が既存のユーザーに対応していない場合、指定されたメールまたは電話番号が既存のユーザーによって使用されている場合、またはその他の理由でユーザーを更新できない場合、上記のメソッドはエラーで失敗します。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
ユーザーを削除する
Firebase Admin SDK では、既存のユーザーを uid
で削除できます。
Node.js
getAuth()
.deleteUser(uid)
.then(() => {
console.log('Successfully deleted user');
})
.catch((error) => {
console.log('Error deleting user:', error);
});
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.");
ユーザーの削除メソッドは、削除が正常に完了すると空の結果を返します。
指定された uid
が既存のユーザーに対応していない場合や、他の理由でユーザーを削除できない場合、ユーザーの削除メソッドはエラーをスローします。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
複数のユーザーを削除する
Firebase Admin SDK では、複数のユーザーをまとめて削除することもできます。ただし、deleteUsers(uids)
などのメソッドを使用して複数のユーザーを一度に削除すると、Cloud Functions for Firebase の onDelete()
イベント ハンドラはトリガーされません。これは、バッチ削除では、ユーザーごとのユーザー削除イベントがトリガーされないためです。削除されるユーザーごとにユーザー削除イベントを発生させたい場合は、ユーザーを一度に 1 人ずつ削除してください。
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}");
}
ユーザーの削除メソッドは、削除できなかったユーザーに関する失敗のリストを返します。すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
すべてのユーザーのリストを取得する
Firebase Admin SDK では、ユーザーのリスト全体をバッチでリストできます。
Node.js
const listAllUsers = (nextPageToken) => {
// List batch of users, 1000 at a time.
getAuth()
.listUsers(1000, nextPageToken)
.then((listUsersResult) => {
listUsersResult.users.forEach((userRecord) => {
console.log('user', userRecord.toJSON());
});
if (listUsersResult.pageToken) {
// List next batch of users.
listAllUsers(listUsersResult.pageToken);
}
})
.catch((error) => {
console.log('Error listing users:', error);
});
};
// Start listing users from the beginning, 1000 at a time.
listAllUsers();
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}");
}
結果の各バッチには、ユーザーのリストと、次のユーザーバッチをリストするために使用するネクスト ページトークンが含まれています。すべてのユーザーがすでにリストされている場合、pageToken
は返されません。
maxResults
フィールドが指定されていない場合は、バッチあたりのデフォルトである 1,000 ユーザーが使用されます。これは、一度にリスト可能なユーザーの最大数です。値が最大値を超えている場合は常に、引数エラーがスローされます。
pageToken
が指定されていない場合は、ユーザーが uid
の順にリストされます。
すべてのエラーコード、その説明、解決手順を記載した一覧については、Admin Authentication API のエラーをご覧ください。
リストされたユーザーのパスワード ハッシュ
OAuth アクセス トークンのリクエストの生成に使用されるユーザーまたはサービス アカウントに firebaseauth.configs.getHashConfig
権限がある場合、この API はパスワード ユーザーの Firebase Auth バックエンドによってハッシュされた passwordSalt
と passwordHash
も返します。それ以外の場合、passwordHash
と passwordSalt
は設定されません。
パスワード ハッシュは機密的な性質を持つ情報であるため、firebaseauth.configs.getHashConfig
権限は Firebase Admin SDK のサービス アカウントにデフォルトで付与されません。ユーザーまたはサービス アカウントに権限を直接追加することはできませんが、カスタムの IAM 役割を作成して間接的に追加できます。
カスタムの IAM ロールを作成するには:
- Google Cloud Console の [IAM と管理] パネルの [ロール] ページに移動します。
- ページの上部にあるプルダウンからプロジェクトを選択します。
- [ロールを作成] をクリックします。
- [権限を追加] をクリックします。
firebaseauth.configs.getHashConfig
権限を検索し、そのチェックボックスをオンにします。- [追加] をクリックします。
- [作成] をクリックして、新しいロールの作成を完了します。
[IAM] ページで、作成したカスタムロールをユーザーまたはサービス アカウントに追加します。
- [IAM と管理] パネルで [IAM] を選択します。
- 編集するサービスまたはユーザー アカウントをメンバーのリストから選択します。
- [別のロールを追加] をクリックします。
- 上記の手順で作成した新しいカスタムのロールを検索します。
- [保存] をクリックします。