管理 Firebase 中的用戶

創建用戶

您可以透過四種方式在 Firebase 專案中建立新使用者:

  • 呼叫createUserWithEmailAndPassword()方法。
  • 首次使用聯合身分識別提供者(例如 Google Sign-In、Facebook Login 或 Apple)登入使用者。

您也可以從Firebase 控制台的「使用者」頁面上的「驗證」部分建立新的經過密碼驗證的使用者。

取得用戶的個人資料

若要取得使用者的個人資料訊息,請使用User的屬性。有三種方法可以取得代表目前使用者的User物件:

  • authStateChangesidTokenChangesuserChanges流:您的偵聽器將收到目前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