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 Local Emulator Suite。如果您正在選擇身份驗證技術和提供者,使用身份驗證和Firebase 安全性規則嘗試使用公共和私有資料的不同資料模型,或者對登入UI 設計進行原型設計,那麼能夠在本地工作而無需部署即時服務可能是一個好主意。

身份驗證模擬器是本機模擬器套件的一部分,它使您的應用程式能夠與模擬資料庫內容和配置以及可選的模擬項目資源(函數、其他資料庫和安全規則)進行互動。

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

  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 Auth 提供了許多方法和實用程序,使您能夠將安全身份驗證整合到新的或現有的 Flutter 應用程式中。在許多情況下,您需要了解使用者的身份驗證狀態,例如他們是否已登入或登出。

Firebase Auth 可讓您透過Stream即時訂閱此狀態。呼叫後,該流會立即提供使用者目前身份驗證狀態的事件,然後在身份驗證狀態發生變更時提供後續事件。

監聽認證狀態變化的方法有3種:

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 等本機平台上,此行為不可配置,且使用者的身份驗證狀態將在應用程式重新啟動之間保留在裝置上。用戶可以使用裝置設定清除應用程式快取的數據,這將擦除儲存的任何現有狀態。

在 Web 平台上,使用者的身份驗證狀態儲存在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);

下一步

瀏覽有關使用受支援的身份和身份驗證服務登入和註冊用戶的指南。