創建用戶
您可以透過四種方式在 Firebase 專案中建立新使用者:
- 呼叫
createUserWithEmailAndPassword()
方法。 - 首次使用聯合身分識別提供者(例如 Google Sign-In、Facebook Login 或 Apple)登入使用者。
您也可以從Firebase 控制台的「使用者」頁面上的「驗證」部分建立新的經過密碼驗證的使用者。
取得用戶的個人資料
若要取得使用者的個人資料訊息,請使用User
的屬性。有三種方法可以取得代表目前使用者的User
物件:
authStateChanges
、idTokenChanges
和userChanges
流:您的偵聽器將收到目前User
,如果沒有使用者經過驗證,則為null
:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
當應用程式啟動時,本機儲存中的使用者憑證(如果有)恢復後會觸發事件,這表示在初始化使用者狀態時始終會呼叫您的偵聽器。然後,每當身份驗證狀態改變時,就會隨著更新的使用者狀態引發一個新事件。
透過偵聽身份驗證狀態,您可以建立一個對身份驗證狀態的這些變更做出反應的使用者介面。
驗證 (
signIn
-) 方法傳回的UserCredential
物件:UserCredential
物件具有包含目前User
user
屬性:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);
FirebaseAuth
實例的currentUser
屬性:如果您確定使用者目前已登錄,則可以從currentUser
屬性存取User
:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }
currentUser
可以為null
有兩個原因:- 用戶尚未登入。
- auth 物件尚未完成初始化。如果您使用偵聽器來追蹤使用者的登入狀態,則不需要處理這種情況。
獲取用戶特定於提供者的個人資料信息
若要取得從連結到使用者的登入提供者檢索的設定檔信息,請使用providerData
屬性。例如:
if (user != null) {
for (final providerProfile in user.providerData) {
// ID of the provider (google.com, apple.com, etc.)
final provider = providerProfile.providerId;
// UID specific to the provider
final uid = providerProfile.uid;
// Name, email address, and profile photo URL
final name = providerProfile.displayName;
final emailAddress = providerProfile.email;
final profilePhoto = providerProfile.photoURL;
}
}
更新用戶的個人資料
您可以使用update
方法更新使用者的基本個人資料資訊(使用者的顯示名稱和個人資料照片 URL)。例如:
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
設定使用者的電子郵件地址
您可以使用updateEmail()
方法設定使用者的電子郵件地址。例如:
await user?.updateEmail("janeq@example.com");
向使用者發送驗證電子郵件
您可以使用sendEmailVerification()
方法傳送地址驗證電子郵件給使用者。例如:
await user?.sendEmailVerification();
您可以在電子郵件範本頁面上自訂Firebase 控制台的驗證部分中使用的電子郵件範本。請參閱 Firebase 說明中心中的電子郵件範本。
發送驗證電子郵件時,也可以透過繼續 URL傳遞狀態以重新導向回應用程式。
此外,您可以在發送電子郵件之前透過更新 Auth 實例上的語言程式碼來本地化驗證電子郵件。例如:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
設定用戶密碼
您可以使用updatePassword()
方法設定使用者密碼。例如:
await user?.updatePassword(newPassword);
發送密碼重設電子郵件
您可以使用sendPasswordResetEmail()
方法向使用者傳送密碼重設電子郵件。例如:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
您可以在電子郵件範本頁面上自訂Firebase 控制台的驗證部分中使用的電子郵件範本。請參閱 Firebase 說明中心中的電子郵件範本。
發送密碼重設電子郵件時,也可以透過繼續 URL傳遞狀態以重新導向回應用程式。
此外,您可以在發送電子郵件之前透過更新 Auth 實例上的語言代碼來本地化密碼重設電子郵件。例如:
await FirebaseAuth.instance.setLanguageCode("fr");
您也可以從 Firebase 控制台傳送密碼重設電子郵件。
刪除用戶
您可以使用delete()
方法刪除使用者帳戶。例如:
await user?.delete();
您也可以從Firebase 控制台的「使用者」頁面上的「驗證」部分刪除使用者。
重新驗證使用者身份
某些安全敏感操作(例如刪除帳戶、設定主電子郵件地址和更改密碼)要求使用者最近登入。如果您執行其中一項操作,而使用者登入時間過長,操作失敗並拋出FirebaseAuthException
,代碼requires-recent-login
。發生這種情況時,請透過從使用者取得新的登入憑證並將憑證傳遞給reauthenticate
來重新驗證使用者的身分。例如:
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
匯入使用者帳戶
您可以使用 Firebase CLI 的auth:import
指令將使用者帳戶從檔案匯入到 Firebase 專案中。例如:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14