使用自訂驗證系統和 C++ 向 Firebase 驗證

您可以透過以下方式整合 Firebase Authentication 與自訂驗證系統: 修改您的驗證伺服器,以便在使用者 才能成功登入應用程式接收這個權杖,並使用該權杖進行驗證 掌握實用知識

事前準備

  1. 將 Firebase 新增至 C++ 專案
  2. 取得專案的伺服器金鑰:
    1. 前往服務帳戶頁面 頁面設定
    2. 按一下底部的「產生新私密金鑰」。 「服務帳戶」頁面的「Firebase Admin SDK」區段。
    3. 系統會自動建立新的服務帳戶的公開/私密金鑰組 都會儲存在電腦上。將此檔案複製到您的驗證伺服器。

透過 Firebase 驗證

Auth 類別是所有 API 呼叫的閘道,
  1. 新增驗證與應用程式標頭檔案:
    #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::Appfirebase::auth::Auth 類別。 AppAuth 之間有一對一的對應關係。
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
,瞭解如何調查及移除這項存取權。 使用驗證伺服器中的權杖呼叫 Auth::SignInWithCustomToken
  1. 使用者登入應用程式時,請將登入憑證 例如他們的使用者名稱和密碼)。您的 伺服器檢查憑證,並傳回 自訂權杖 請手動檢查。
  2. 從驗證伺服器收到自訂權杖後,請將 將其登入 Auth::SignInWithCustomToken 以便登入使用者:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. 如果您的程式有定期執行的更新迴圈 (例如 30 或 60) 每秒可執行 1 次 Auth::SignInWithCustomTokenLastResult:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomTokenLastResult();
    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 (未來)。

後續步驟

使用者首次登入後,系統會建立新的使用者帳戶 也就是使用者的名稱和密碼 號碼或驗證提供者資訊,也就是使用者登入時使用的網址。這項新功能 帳戶儲存為 Firebase 專案的一部分,可用來識別 即可限制使用者登入專案中的所有應用程式

  • 在您的應用程式中,您可以透過 firebase::auth::User 物件:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      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();
    }
    
  • 在你的Firebase Realtime DatabaseCloud Storage中 查看安全性規則 透過 auth 變數取得已登入使用者的不重複使用者 ID。 控管使用者可以存取的資料

您可以讓使用者透過多重驗證機制登入您的應用程式 將驗證供應商憑證連結至 現有的使用者帳戶

如要登出使用者,請呼叫 SignOut()

auth->SignOut();