ユーザー管理

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

デフォルトでは、新しいユーザー用のランダムな uidFirebase 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 FirebaseonDelete() イベント ハンドラはトリガーされません。これは、バッチ削除では、ユーザーごとのユーザー削除イベントがトリガーされないためです。削除されるユーザーごとにユーザー削除イベントを発生させたい場合は、ユーザーを一度に 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 バックエンドによってハッシュされた passwordSaltpasswordHash も返します。それ以外の場合、passwordHashpasswordSalt は設定されません。

パスワード ハッシュは機密的な性質を持つ情報であるため、firebaseauth.configs.getHashConfig 権限は Firebase Admin SDK のサービス アカウントにデフォルトで付与されません。ユーザーまたはサービス アカウントに権限を直接追加することはできませんが、カスタムの IAM 役割を作成して間接的に追加できます。

カスタムの IAM ロールを作成するには:

  1. Google Cloud Console の [IAM と管理] パネルの [ロール] ページに移動します。
  2. ページの上部にあるプルダウンからプロジェクトを選択します。
  3. [ロールを作成] をクリックします。
  4. [権限を追加] をクリックします。
  5. firebaseauth.configs.getHashConfig 権限を検索し、そのチェックボックスをオンにします。
  6. [追加] をクリックします。
  7. [作成] をクリックして、新しいロールの作成を完了します。

[IAM] ページで、作成したカスタムロールをユーザーまたはサービス アカウントに追加します。

  1. [IAM と管理] パネルで [IAM] を選択します。
  2. 編集するサービスまたはユーザー アカウントをメンバーのリストから選択します。
  3. [別のロールを追加] をクリックします。
  4. 上記の手順で作成した新しいカスタムのロールを検索します。
  5. [保存] をクリックします。