使用 Unity 使用密碼式帳戶向 Firebase 驗證

您可以使用 Firebase 驗證,讓使用者以自己的電子郵件地址和密碼透過 Firebase 進行驗證,以及管理應用程式的密碼帳戶。

事前準備

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

  • 註冊 Unity 專案,並將其設定為使用 Firebase。

    • 如果您的 Unity 專案已使用 Firebase,表示該專案已完成註冊並設定 Firebase。

    • 如果您沒有 Unity 專案,可以下載範例應用程式

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

請注意,將 Firebase 新增至 Unity 專案涉及到 Firebase 主控台和開放式 Unity 專案中的工作 (例如從主控台下載 Firebase 設定檔,再移至 Unity 專案)。

存取 Firebase.Auth.FirebaseAuth 類別

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

建立以密碼為基礎的帳戶

如要使用密碼建立新的使用者帳戶,請在應用程式的登入程式碼中完成下列步驟:

  1. 當新使用者透過應用程式的註冊表單註冊時,請完成應用程式需要的所有新帳戶驗證步驟,例如確認新帳戶的密碼是否正確輸入,並且是否符合您的複雜性要求。
  2. 將新使用者的電子郵件地址和密碼傳送至 FirebaseAuth.CreateUserWithEmailAndPassword,即可建立新帳戶:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

透過電子郵件地址和密碼登入使用者帳戶

使用密碼登入使用者的步驟與建立新帳戶的步驟類似。在應用程式的登入函式中執行以下操作:

  1. 使用者登入應用程式時,請將該使用者的電子郵件地址和密碼傳送至 FirebaseAuth.SignInWithEmailAndPassword
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync 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);
    });
    
  2. 您也可以建立憑證並登入,就像其他工作流程一樣:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync 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 驗證方法會將電子郵件地址當做參數,在需要註冊的情況下 (例如使用電子郵件地址和密碼登入時),或是因電子郵件地址和密碼不能使用而註冊時 (例如變更使用者電子郵件地址時),就會擲回特定錯誤。儘管這有助於向使用者建議特定補救方式,但也可能遭不肖人士濫用,找出使用者註冊的電子郵件地址。

為降低這個風險,我們建議您使用 Google Cloud gcloud 工具,為專案啟用電子郵件列舉防護功能。請注意,啟用這項功能會變更 Firebase 驗證的錯誤回報行為,請確保應用程式不會依賴更具體的錯誤。

後續步驟

使用者首次登入時,系統會建立新的使用者帳戶,並連結至憑證 (即使用者名稱與密碼、電話號碼或驗證提供者資訊),也就是使用者登入時使用的憑證。這個新帳戶會儲存在您的 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();