開始在 Flutter 上使用 Firebase 驗證

將應用程式連結至 Firebase

如果尚未安裝並初始化 Flutter 專用的 Firebase SDK,請先完成這項操作。 例如

在應用程式中加入 Firebase 驗證

  1. 在 Flutter 專案的根目錄中執行下列指令,以安裝 外掛程式:

    flutter pub add firebase_auth
    
  2. 完成後,請重新建構 Flutter 應用程式:

    flutter run
    
  3. 在 Dart 程式碼中匯入外掛程式:

    import 'package:firebase_auth/firebase_auth.dart';
    

如要使用驗證供應商,您必須在 Firebase 控制台啟用該供應商。 請前往「Firebase 驗證」部分的「登入方式」頁面啟用 要求登入電子郵件/密碼,以及針對應用程式採用的任何其他識別資訊提供者。

(選用) 使用 Firebase 本機模擬器套件設計原型並進行測試

在說明應用程式如何驗證使用者之前,我們先介紹一組 可用來設計驗證原型及測試驗證功能的工具: Firebase 本機模擬器套件。如果你正在考慮採用驗證方法 和供應商嘗試運用公開和私人資料,嘗試不同的資料模型 運用驗證和 Firebase 安全性規則,或是設計登入使用者介面的原型, 無需部署有效服務就在本機上運作,會是個好主意。

驗證模擬器屬於本機模擬器套件的一部分, 可讓應用程式與模擬的資料庫內容和設定互動,例如: 以及選用的模擬專案資源 (函式、其他資料庫 和安全性規則)。

使用驗證模擬器只需完成幾個步驟:

  1. 將一行程式碼新增至應用程式的測試設定,即可與模擬器連線。

  2. 從本機專案目錄的根目錄中執行 firebase emulators:start

  3. 使用本機模擬器套件 UI 進行互動式原型設計,或 用於非互動式測試的模擬器 REST API。

  4. 呼叫 useAuthEmulator() 來指定模擬器位址和通訊埠:

    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    
    // Ideal time to initialize
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    //...
    }
    

如需詳細指南,請參閱「將應用程式連線至驗證模擬器」一文。 詳情請參閱「本機模擬器套件簡介」。

接下來說明如何驗證使用者。

查看目前的驗證狀態

Firebase 驗證提供許多方法和公用程式,方便您整合 新的或現有的 Flutter 應用程式安全驗證機制在許多 您必須先瞭解使用者的驗證狀態 例如使用者登入帳戶或登出狀態

Firebase Auth 能讓您透過 Stream。 呼叫串流後,串流可提供使用者目前當前事件的即時事件 然後提供後續事件 驗證狀態變更

有三種方法可以監聽驗證狀態變更:

authStateChanges()

如要訂閱這些變更,請呼叫以下項目的 authStateChanges() 方法: FirebaseAuth 執行個體:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

發生下列情況時,會觸發事件:

  • 登錄監聽器後立即執行。
  • 使用者已登入。
  • 目前使用者登出時。

idTokenChanges()

如要訂閱這些變更,請呼叫以下項目的 idTokenChanges() 方法: FirebaseAuth 執行個體:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

發生下列情況時,會觸發事件:

  • 登錄監聽器後立即執行。
  • 使用者已登入。
  • 目前使用者登出時。
  • 目前使用者的權杖發生變更時。

userChanges()

如要訂閱這些變更,請呼叫以下項目的 userChanges() 方法: FirebaseAuth 執行個體:

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

發生下列情況時,會觸發事件:

  • 登錄監聽器後立即執行。
  • 使用者已登入。
  • 目前使用者登出時。
  • 目前使用者的權杖發生變更時。
  • 當呼叫 FirebaseAuth.instance.currentUser 提供的下列方法時:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

保留驗證狀態

所有平台適用的 Firebase SDK 都提供立即的支援,可確保 使用者的驗證狀態在應用程式重新啟動或網頁時維持不變 重新載入。

在 Android 和如果是 iOS 裝置,就無法設定此行為 且使用者的驗證狀態會保留在裝置上 就會重新啟動。使用者可以透過裝置設定清除應用程式的快取資料 這項操作會抹除目前儲存的所有狀態。

在網路平台上,使用者的驗證狀態會儲存在 IndexedDB。 您可以變更永久性,將資料儲存在本機儲存空間 使用 Persistence.LOCAL。 如有需要,您可以將這項預設行為變更為永久保留 以及目前工作階段的驗證狀態如要設定 設定,請呼叫以下方法 FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);。 您仍可使用 setPersistence(Persistence.NONE) 更新每個驗證執行個體的持續性。

// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);

後續步驟

瀏覽指南,瞭解如何運用支援的瀏覽器登入及註冊使用者 身分識別及驗證服務