C++ 中的 Firebase 驗證入門

您可以使用 Firebase 身份驗證允許用戶使用一種或多種登錄方法(包括電子郵件地址和密碼登錄)以及聯合身份提供商(例如 Google 登錄和 Facebook 登錄)登錄您的應用。本教程通過向您展示如何將電子郵件地址和密碼登錄添加到您的應用程序,讓您開始使用 Firebase 身份驗證。

將您的 C++ 項目連接到 Firebase

在您可以使用Firebase 身份驗證之前,您需要:

  • 註冊您的 C++ 項目並將其配置為使用 Firebase。

    如果您的 C++ 項目已經使用 Firebase,那麼它已經為 Firebase 註冊和配置。

  • Firebase C++ SDK添加到您的 C++ 項目。

請注意,將 Firebase 添加到您的 C++ 項目涉及Firebase 控制台和打開的 C++ 項目中的任務(例如,您從控制台下載 Firebase 配置文件,然後將它們移動到您的 C++ 項目中)。

註冊新用戶

創建一個表單,允許新用戶使用他們的電子郵件地址和密碼註冊您的應用程序。當用戶完成表單時,驗證用戶提供的電子郵件地址和密碼,然後將它們傳遞給CreateUserWithEmailAndPassword方法:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

您可以通過在CreateUserWithEmailAndPasswordLastResult Future 對像上註冊回調來檢查帳戶創建操作的狀態,或者,如果您正在編寫具有某種週期性更新循環的遊戲或應用程序,則可以通過輪詢更新循環中的狀態來檢查帳戶創建操作的狀態。

例如,使用未來:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

或者,要使用輪詢,請在遊戲的更新循環中執行以下示例:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

登錄現有用戶

創建一個表單,允許現有用戶使用他們的電子郵件地址和密碼登錄。當用戶完成表單時,調用SignInWithEmailAndPassword方法:

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

以獲取註冊結果的方式獲取登錄操作的結果。

設置身份驗證狀態偵聽器並獲取帳戶數據

要響應登錄和註銷事件,請將偵聽器附加到全局身份驗證對象。每當用戶的登錄狀態發生變化時,都會調用此偵聽器。因為偵聽器僅在身份驗證對象完全初始化並且任何網絡調用完成後才運行,所以它是獲取有關登錄用戶的信息的最佳位置。

通過實現firebase::auth::AuthStateListener抽像類來創建監聽器。例如,創建一個在用戶成功登錄時獲取用戶信息的偵聽器:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

使用 firebase firebase::auth::Auth對象的AddAuthStateListener方法附加監聽器:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

下一步

了解如何添加對其他身份提供者和匿名訪客帳戶的支持: