使用自訂驗證系統和 Unity 進行 Firebase 驗證

您可以修改驗證伺服器,在使用者成功登入時產生自訂簽署權杖,藉此將 Firebase 驗證與自訂驗證系統整合。應用程式收到此權杖後,會使用該權杖進行 Firebase 驗證。

事前準備

  1. 使用 Firebase 驗證前,您必須先完成以下事項:

    • 在 Firebase 專案中註冊 Unity 專案。
    • 在 Unity 專案中新增 Firebase Unity SDK (尤其是 FirebaseAuth.unitypackage)。

    如需這些初始設定步驟的詳細操作說明,請參閱「將 Firebase 新增至 Unity 專案」。

  2. 取得專案的伺服器金鑰:
    1. 前往專案設定中的服務帳戶頁面。
    2. 在「服務帳戶」頁面的「Firebase Admin SDK」部分底部,按一下「產生新的私密金鑰」
    3. 新服務帳戶的公開/私密金鑰組會自動儲存至您的電腦。將這個檔案複製到您的驗證伺服器。

透過 Firebase 驗證

FirebaseAuth 類別是所有 API 呼叫的閘道,您可透過 FirebaseAuth.DefaultInstance 存取。
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

使用驗證伺服器提供的權杖呼叫 Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync

  1. 使用者登入應用程式時,請將登入憑證 (例如使用者名稱和密碼) 傳送至您的驗證伺服器。您的伺服器檢查憑證,並傳回有效自訂憑證
  2. 從驗證伺服器收到自訂權杖後,請將該權杖傳遞至 Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync 讓使用者登入:
    auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCustomTokenAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

後續步驟

使用者首次登入時,系統會建立新的使用者帳戶,並連結至憑證 (即使用者名稱與密碼、電話號碼或驗證提供者資訊),也就是使用者登入時使用的憑證。這個新帳戶會儲存在您的 Firebase 專案中,可用來識別專案中各個應用程式的使用者 (無論使用者登入方式為何)。

  • 在應用程式中,您可以透過 Firebase.Auth.FirebaseUser 物件取得使用者的基本個人資料:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // 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 User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • 在 Firebase 即時資料庫和 Cloud Storage 安全性規則中,您可以透過 auth 變數取得登入使用者的專屬 ID,並使用該 ID 控管使用者可存取哪些資料。

您可以將驗證供應商憑證連結至現有的使用者帳戶,讓使用者透過多個驗證服務提供者登入您的應用程式。

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

auth.SignOut();