您可以使用 Firebase Authentication 讓使用者透過 Firebase 使用自己的電子郵件地址和密碼,管理應用程式的 使用 API
事前準備
如要使用 Firebase Authentication,您必須先完成下列步驟:
註冊 Unity 專案並設定使用 Firebase。
如果 Unity 專案已使用 Firebase,則表示已為 Firebase 註冊及設定。
如果您沒有 Unity 專案,可以下載應用程式示例。
將 Firebase Unity SDK (特別是
FirebaseAuth.unitypackage
) 新增至 Unity 專案
請注意,將 Firebase 新增至 Unity 專案時,必須一併執行以下兩者的工作: Firebase 控制台,然後在開啟的 Unity 專案中 (例如,您可以從控制台下載 Firebase 設定檔,然後 放入您的 Unity 專案中)。
存取 Firebase.Auth.FirebaseAuth
類別
FirebaseAuth
類別是所有 API 呼叫的閘道。可透過 FirebaseAuth.DefaultInstance 存取。Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
建立以密碼為基礎的帳戶
如要使用密碼建立新使用者帳戶,請在應用程式的登入程式碼中完成下列步驟:
- 當新使用者透過應用程式的註冊表單註冊時,請完成新的使用者 帳戶驗證步驟,例如驗證 已正確輸入新帳戶的密碼,符合您的複雜程度 Google Cloud 就是最佳選擇
- 傳送新使用者的電子郵件地址和密碼,建立新帳戶
至
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); });
使用電子郵件地址和密碼登入使用者
使用者透過密碼登入的步驟與建立新帳戶的步驟類似。在應用程式的登入函式中執行以下操作:
- 使用者登入應用程式時,傳送使用者的電子郵件地址並
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); });
- 您也可以建立憑證並登入,就像其他工作流程一樣:
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 主控台的「驗證設定」頁面中開啟「密碼政策」分頁:
Firebase Authentication 密碼政策支援下列密碼規定:
須輸入小寫字元
須使用大寫字元
必須輸入數字字元
須有非英數字元
下列字元符合非英數字元的規定:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
密碼長度下限 (範圍為 6 到 30 個字元,預設為 6)
密碼長度上限 (長度上限為 4096 個半形字元)
您可以啟用密碼政策強制執行模式,有兩種模式可供選擇:
強制執行:使用者必須更新密碼,才能符合政策規定,否則無法登入。
通知:使用者可以使用不符規定的密碼登入。使用這個模式時,您應檢查使用者的密碼是否符合用戶端政策,並在使用者不符合政策時,以某種方式提示他們更新密碼。
新使用者一律須選擇符合 政策。
如果您有活躍使用者,建議您只在 使用者將無法存取密碼不符合政策的使用者。 請改用通知模式,讓使用者以目前的密碼登入,並告知他們密碼不符合哪些規定。
建議:啟用電子郵件列舉防護功能
部分 Firebase Authentication 方法會將電子郵件地址做為參數擲回 特定錯誤 (在必須註冊該電子郵件地址時取消註冊) (例如,使用電子郵件地址和密碼登入時) ,哪些情況不能使用 (例如變更使用者的電子郵件地址)。 雖然這有助於向使用者建議特定解決方法,但也可能遭到惡意人士濫用,用來找出使用者註冊的電子郵件地址。
為降低這類風險,建議您使用 Google Cloud gcloud
工具,為專案啟用電子郵件列舉保護功能。請注意,啟用這項功能會變更 Firebase Authentication 的錯誤回報行為:請確認您的應用程式不會依賴更具體的錯誤。
後續步驟
使用者首次登入後,系統會建立新使用者帳戶,並連結至使用者登入時所用的憑證 (即使用者名稱和密碼、電話號碼或驗證服務提供者資訊)。這項新功能 帳戶儲存為 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 Realtime Database和Cloud Storage中 查看安全性規則之後 透過
auth
變數取得已登入使用者的不重複使用者 ID。 控管使用者可以存取的資料
您可以將驗證服務供應商憑證連結至現有使用者帳戶,讓使用者使用多個驗證服務供應商登入應用程式。
如要將使用者登出,請呼叫 SignOut()
:
auth.SignOut();