Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Firebaseでユーザーを管理する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

ユーザーを作成する

Firebaseプロジェクトで新しいユーザーを作成するには、 CreateUserWithEmailAndPasswordメソッドを呼び出すか、 GoogleサインインFacebookログインなどのフェデレーションIDプロバイダーを使用してユーザーに初めてサインインします。

[ユーザー]ページのFirebaseコンソールの[認証]セクションから、パスワードで認証された新しいユーザーを作成することもできます。

現在サインインしているユーザーを取得する

現在のユーザーを取得するための推奨される方法は、Authオブジェクトにリスナーを設定することです。

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user->uid().c_str());
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};
// ... initialization code
// Test notification on registration.
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

リスナーを使用することにより、現在のユーザーを取得するときに、Authオブジェクトが初期化などの中間状態にならないようにします。

current_userを呼び出すことにより、現在サインインしているユーザーを取得することもできます。ユーザーがサインインしていない場合、 current_userはnullptrを返します。

ユーザーの資格情報を保持する

ユーザーの資格情報は、ユーザーがサインインした後、ローカルキーストアに保存されます。ユーザーの資格情報のローカルキャッシュは、ユーザーをサインアウトすることで削除できます。キーストアはプラットフォーム固有です。

ユーザーのプロファイルを取得する

ユーザーのプロファイル情報を取得するには、 firebase::auth::Userのインスタンスのアクセサメソッドを使用します。例えば:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  std::string name = user->display_name();
  std::string email = user->email();
  std::string photo_url = user->photo_url();
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use firebase::auth::User::Token() instead.
  std::string uid = user->uid();
}

ユーザーのプロバイダー固有のプロファイル情報を取得する

ユーザーにリンクされているサインインプロバイダーから取得したプロファイル情報を取得するには、 ProviderDataメソッドを使用します。例えば:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  for (auto it = user->provider_data().begin();
       it != user->provider_data().end(); ++it) {
    firebase::auth::UserInfoInterface* profile = *it;
    // Id of the provider (ex: google.com)
    std::string providerId = profile->provider_id();

    // UID specific to the provider
    std::string uid = profile->uid();

    // Name, email address, and profile photo Url
    std::string name = profile->display_name();
    std::string email = profile->email();
    std::string photoUrl = profile->photo_url();
  }
}

ユーザーのプロファイルを更新する

UpdateUserProfileメソッドを使用して、ユーザーの基本的なプロファイル情報(ユーザーの表示名とプロファイル写真のURL)を更新できます。例えば:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  firebase::auth::User::UserProfile profile;
  profile.display_name = "Jane Q. User";
  profile.photo_url = "https://example.com/jane-q-user/profile.jpg";
  user->UpdateUserProfile(profile).OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("User profile updated.");
        }
      },
      nullptr);  // pass user_data here.
}

ユーザーのメールアドレスを設定する

UpdateEmailメソッドを使用してユーザーの電子メールアドレスを設定できます。例えば:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->UpdateEmail("user@example.com")
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("User email address updated.");
            }
          },
          nullptr);
}

ユーザーに確認メールを送信する

SendEmailVerificationメソッドを使用して、アドレス確認メールをユーザーに送信できます。例えば:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->SendEmailVerification().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("Email sent.");
        }
      },
      nullptr);
}

Firebaseコンソールの[認証]セクションで使用されるメールテンプレートは、[メールテンプレート]ページでカスタマイズできます。 Firebaseヘルプセンターのメールテンプレートをご覧ください。

ユーザーのパスワードを設定する

UpdatePasswordメソッドを使用してユーザーのパスワードを設定できます。例えば:

firebase::auth::User* user = auth->current_user();
std::string newPassword = "SOME-SECURE-PASSWORD";

if (user != nullptr) {
  user->UpdatePassword(newPassword.c_str())
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("password updated.");
            }
          },
          nullptr);
}

パスワードリセットメールを送信する

SendPasswordResetEmailメソッドを使用して、パスワードリセットメールをユーザーに送信できます。例えば:

std::string emailAddress = "user@example.com";

auth->SendPasswordResetEmail(emailAddress.c_str())
    .OnCompletion(
        [](const firebase::Future<void>& completed_future,
           void* user_data) {
          // We are probably in a different thread right now.
          if (completed_future.error() == 0) {
            // Email sent.
          } else {
            // An error happened.
            printf("Error %d: %s", completed_future.error(),
                   completed_future.error_message());
          }
        },
        nullptr);

Firebaseコンソールの[認証]セクションで使用されるメールテンプレートは、[メールテンプレート]ページでカスタマイズできます。 Firebaseヘルプセンターのメールテンプレートをご覧ください。

Firebaseコンソールからパスワードリセットメールを送信することもできます。

ユーザーを削除する

Deleteメソッドを使用してユーザーアカウントを削除できます。例えば:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->Delete().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        if (completed_future.error() == 0) {
          // User deleted.
        } else {
          // An error happened.
          printf("Error %d: %s", completed_future.error(),
                 completed_future.error_message());
        }
      },
      nullptr);
}

Firebaseコンソールの[認証]セクションの[ユーザー]ページからユーザーを削除することもできます。

ユーザーを再認証する

アカウントの削除、メインのメールアドレスの設定、パスワードの変更など、セキュリティ上重要なアクションの中には、ユーザーが最近サインインしている必要があるものがあります。これらのアクションのいずれかを実行し、ユーザーがサインインするのが非常に長い場合は、アクションは失敗します。

これが発生した場合は、ユーザーから新しいサインインクレデンシャルを取得し、そのReauthenticateを再認証に渡すことで、ユーザーを再認証します。例えば:

firebase::auth::User* user = auth->current_user();

// Get auth credentials from the user for re-authentication. The example
// below shows email and password credentials but there are multiple
// possible providers, such as GoogleAuthProvider or FacebookAuthProvider.
firebase::auth::Credential credential =
    firebase::auth::EmailAuthProvider::GetCredential("user@example.com",
                                                     "password1234");

if (user != nullptr) {
  user->Reauthenticate(credential)
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            if (completed_future.error() == 0) {
              printf("User re-authenticated.");
            }
          },
          nullptr);
}

ユーザーアカウントをインポートする

Firebase CLIのauth:importコマンドを使用して、ファイルからFirebaseプロジェクトにユーザーアカウントをインポートできます。例えば:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14