ユーザー管理

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

admin.auth().getUser(uid)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(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)

このメソッドは、そのメソッドで提供される uid に対応するユーザーの UserRecord オブジェクトを返します。

提供された uid が既存のユーザーに属していない場合や、他の理由でユーザーを取得できない場合、上記のメソッドはエラーをスローします。エラーコードとその説明、および解決手順を含む完全な一覧については、Admin Auth API のエラーをご覧ください。

場合によっては、ユーザーの uid ではなく、メールアドレスが提供されることがあります。Firebase Admin SDK では、メールアドレスによるユーザー情報の検索がサポートされています。

Node.js

admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(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)

このメソッドは、提供されたメールに対応するユーザーの UserRecord オブジェクトを返します。

提供されたメールアドレスが既存のユーザーに属していない場合や、他の理由でユーザーを取得できない場合、Admin SDK はエラーをスローします。エラーコードとその説明、および解決手順を含む完全な一覧は、Admin Authentication API のエラーをご覧ください。

それ以外の場合は、ユーザーの uid ではなく、電話番号が提供されます。Firebase Admin SDK では、電話番号によるユーザー情報の検索がサポートされています。

Node.js

admin.auth().getUserByPhoneNumber(phoneNumber)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(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)

このメソッドは、提供された電話番号に対応するユーザーの UserRecord オブジェクトを返します。

提供された電話番号が既存のユーザーに属していない場合や、その他の理由でユーザーを取得できない場合、Admin SDK はエラーをスローします。エラーコードとその説明、および解決手順を含む完全な一覧は、Admin Authentication API のエラーをご覧ください。

ユーザーを作成する

Admin SDK は、新しい Firebase Authentication ユーザーを作成するメソッドを提供します。このメソッドは、新しく作成されたユーザー アカウントに含めるプロフィール情報を含むオブジェクトを受け入れます。

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(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully created new user:", userRecord.uid);
  })
  .catch(function(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)

デフォルトでは、新しいユーザーのランダム uid が Firebase Authentication によって生成されます。新しいユーザーに対して独自の uid を指定するには、ユーザー作成メソッドに渡される引数にその uid を追加します。

Node.js

admin.auth().createUser({
  uid: "some-uid",
  email: "user@example.com",
  phoneNumber: "+11234567890"
})
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully created new user:", userRecord.uid);
  })
  .catch(function(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)

次のプロパティを任意に組み合わせて指定できます。

表 1. ユーザー作成オペレーションでサポートされているプロパティ

プロパティ 説明
uid 文字列 新しく作成されたユーザーに割り当てる uid。1~128 文字の文字列を指定します。指定されていない場合は、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

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(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully updated user", userRecord.toJSON());
  })
  .catch(function(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)

次のプロパティを任意に組み合わせて指定できます。

表 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

admin.auth().deleteUser(uid)
  .then(function() {
    console.log("Successfully deleted user");
  })
  .catch(function(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)

ユーザーの削除メソッドは、削除が正常に完了すると空の結果を返します。

提供された uid が既存のユーザーに対応していない場合や、他の理由でユーザーを削除できない場合、ユーザーの削除メソッドはエラーをスローします。エラーコードとその説明、および解決手順を含む完全な一覧は、Admin Authentication API のエラーをご覧ください。

すべてのユーザーをリストする

Firebase Admin SDK では、ユーザーのリスト全体をバッチでリストできます。

Node.js

function listAllUsers(nextPageToken) {
  // List batch of users, 1000 at a time.
  admin.auth().listUsers(1000, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        console.log("user", userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken)
      }
    })
    .catch(function(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
	}
}

結果の各バッチには、ユーザーのリストと、次のユーザーバッチをリストするために使用するネクスト ページトークンが含まれています。すべてのユーザーがすでにリストされている場合、pageToken は返されません。ユーザーがパスワード ユーザーの場合、この API では、Firebase Auth バックエンドによりハッシュされた passwordSalt および passwordHash も返されます。

maxResults フィールドが指定されていない場合は、バッチあたりのデフォルトである 1,000 ユーザーが使用されます。これは、一度にリスト可能なユーザーの最大数です。値が最大値を超えている場合は常に、引数エラーがスローされます。pageToken が指定されていない場合は、ユーザーが作成時刻の順にリストされます。

エラーコードとその説明、および解決手順を含む完全な一覧は、Admin Authentication API のエラーをご覧ください。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。