開始在 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 安全性規則試用不同資料模型 (包括公開和私人資料),或是製作登入 UI 設計的原型,那麼在不部署即時服務的情況下,於本機作業會是個好主意。

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

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

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

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

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

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

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

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

接下來,我們將繼續說明如何驗證使用者。

檢查目前的驗證狀態

Firebase 驗證提供多種方法和公用程式,協助您將安全驗證功能整合至新的或現有的 Flutter 應用程式。在許多情況下,您需要瞭解使用者的驗證狀態,例如使用者是否已登入或登出。

Firebase 驗證可讓您透過 Stream 即時訂閱這項狀態。 呼叫後,串流會立即提供使用者目前驗證狀態的事件,然後在驗證狀態變更時提供後續事件。

您可以透過三種方法監聽驗證狀態變更:

authStateChanges()

如要訂閱這些變更,請在 FirebaseAuth 執行個體上呼叫 authStateChanges() 方法:

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

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

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

idTokenChanges()

如要訂閱這些變更,請在 FirebaseAuth 執行個體上呼叫 idTokenChanges() 方法:

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

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

  • 監聽器註冊後立即執行。
  • 使用者登入時。
  • 目前使用者登出時。
  • 目前使用者的權杖有所變更時。

userChanges()

如要訂閱這些變更,請在 FirebaseAuth 執行個體上呼叫 userChanges() 方法:

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) 更新每個 Auth 執行個體的持續性。

// 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);

後續步驟

請參閱相關指南,瞭解如何透過支援的身分和驗證服務,讓使用者登入及註冊。