使用 C++ 透過 Firebase 進行匿名身份驗證

您可以使用 Firebase 驗證建立並使用臨時匿名帳戶來透過 Firebase 進行驗證。這些臨時匿名帳戶可用於允許尚未註冊您的應用程式的使用者使用受安全規則保護的資料。如果匿名使用者決定註冊您的應用程序,您可以將他們的登入憑證連結到匿名帳戶,以便他們可以在將來的會話中繼續使用受保護的資料。

在你開始之前

  1. 將 Firebase 新增到您的 C++ 專案
  2. 如果您尚未將應用程式連線至 Firebase 項目,請從Firebase 控制台執行此操作。
  3. 啟用匿名身份驗證:
    1. Firebase 控制台中,開啟「驗證」部分。
    2. 登入方法頁面上,啟用匿名登入方法。
    3. 可選:如果您已將專案升級至具有 Identity Platform 的 Firebase 驗證,則可以啟用自動清理。啟用此設定後,超過 30 天的匿名帳戶將自動刪除。在啟用自動清理的項目中,匿名身分驗證將不再計入使用限製或計費配額。請參閱自動清理

使用 Firebase 進行匿名身份驗證

當已登出的使用者使用需要 Firebase 驗證的應用程式功能時,請透過完成以下步驟以匿名方式登入使用者:

Auth類別是所有 API 呼叫的網關。
  1. 新增Auth和App頭檔:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. 在初始化程式碼中,建立一個firebase::App類別。
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. 取得 firebase firebase::App firebase::auth::Auth類別。 AppAuth之間存在一對一的對應。
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
  • 調用Auth::SignInAnonymously
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymously();
    
  • 如果您的程式有一個定期執行的更新循環(例如每秒 30 或 60 次),您可以使用Auth::SignInAnonymouslyLastResult :
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymouslyLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    每次更新檢查一次結果;或者,如果您的程式是事件驅動的,您可能更喜歡在 Future 上註冊回調
  • 將匿名帳戶轉換為永久帳戶

    當匿名用戶註冊您的應用程式時,您可能希望允許他們使用新帳戶繼續工作 - 例如,您可能希望讓用戶在註冊之前添加到購物車的商品在他們的新帳戶中可用帳戶的購物車。為此,請完成以下步驟:

    1. 當使用者註冊時,完成使用者驗證提供者的登入流程,直到(但不包括)呼叫Auth::SignInWith方法之一。例如,取得使用者的 Google ID 令牌、Facebook 存取權令牌或電子郵件地址和密碼。
    2. 取得新身分驗證提供者的auth::Credential

      Google 登入
      firebase::auth::Credential credential =
          firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                            nullptr);
      
      Facebook 登入
      firebase::auth::Credential credential =
          firebase::auth::FacebookAuthProvider::GetCredential(access_token);
      
      電子郵件密碼登入
      firebase::auth::Credential credential =
          firebase::auth::EmailAuthProvider::GetCredential(email, password);
      
    3. auth::Credential物件傳遞給登入使用者的LinkWithCredential方法:

      // Link the new credential to the currently active user.
      firebase::auth::User current_user = auth->current_user();
      firebase::Future<firebase::auth::AuthResult> result =
          current_user.LinkWithCredential(credential);
      

    如果對LinkWithCredential的呼叫成功,使用者的新帳戶就可以存取匿名帳戶的 Firebase 資料。

    自動清理

    如果您已將專案升級至Firebase Authentication with Identity Platform ,則可以在 Firebase 控制台中啟用自動清理。啟用此功能後,您將允許 Firebase 自動刪除超過 30 天的匿名帳戶。在啟用自動清理的項目中,匿名身分驗證將不計入使用限製或計費配額。

    • 啟用自動清理後建立的任何匿名帳戶可能會在建立後 30 天後隨時自動刪除。
    • 啟用自動清理後 30 天,現有匿名帳戶將有資格自動刪除。
    • 如果您關閉自動清理,任何計劃刪除的匿名帳戶仍將保留計劃刪除。
    • 如果您透過將匿名帳戶連結到任何登入方法來「升級」該帳戶,則該帳戶不會自動刪除。

    如果您想在啟用此功能之前了解有多少使用者會受到影響,並且您已將專案升級到使用 Identity Platform 進行 Firebase 驗證,則可以在Cloud Logging中按is_anon進行篩選。

    下一步

    現在,使用者可以透過 Firebase 進行身份驗證,您可以使用Firebase 規則控制他們對 Firebase 資料庫中資料的存取。