在你開始之前
- 將 Firebase 新增到您的 C++ 專案。
- 取得項目的伺服器金鑰:
- 前往項目設定中的服務帳戶頁面。
- 點選服務帳戶頁面Firebase Admin SDK部分底部的產生新私鑰。
- 新服務帳戶的公鑰/私鑰對會自動儲存在您的電腦上。將此文件複製到您的身份驗證伺服器。
使用 Firebase 進行身份驗證
Auth
類別是所有 API 呼叫的網關。- 新增Auth和App頭檔:
#include "firebase/app.h" #include "firebase/auth.h"
- 在初始化程式碼中,建立一個
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__)
- 取得 firebase
firebase::App
firebase::auth::Auth
類別。App
和Auth
之間存在一對一的對應。firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Auth::SignInWithCustomToken
。- 當使用者登入您的應用程式時,將他們的登入憑證(例如使用者名稱和密碼)發送到您的身份驗證伺服器。您的伺服器檢查憑證並傳回自訂令牌(如果它們有效)。
- 從身份驗證伺服器收到自訂令牌後,將其傳遞給
Auth::SignInWithCustomToken
以登入使用者:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token);
- 如果您的程式有定期執行的更新循環(例如每秒 30 或 60 次),您可以使用
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 即時資料庫和雲端儲存安全性規則中,您可以從
auth
變數取得登入使用者的唯一使用者 ID,並使用它來控制使用者可以存取哪些資料。
您可以透過將身分驗證提供者憑證連結到現有使用者帳戶,允許使用者使用多個驗證提供者登入您的應用程式。
若要登出用戶,請呼叫SignOut()
:
auth->SignOut();