將應用程式連結至 Firebase
如果尚未安裝並初始化 Flutter 專用的 Firebase SDK,請先完成這項操作。 例如
在應用程式中加入 Firebase 驗證
在 Flutter 專案的根目錄中執行下列指令,以安裝 外掛程式:
flutter pub add firebase_auth
完成後,請重新建構 Flutter 應用程式:
flutter run
在 Dart 程式碼中匯入外掛程式:
import 'package:firebase_auth/firebase_auth.dart';
如要使用驗證供應商,您必須在 Firebase 控制台啟用該供應商。 請前往「Firebase 驗證」部分的「登入方式」頁面啟用 要求登入電子郵件/密碼,以及針對應用程式採用的任何其他識別資訊提供者。
(選用) 使用 Firebase 本機模擬器套件設計原型並進行測試
在說明應用程式如何驗證使用者之前,我們先介紹一組 可用來設計驗證原型及測試驗證功能的工具: Firebase 本機模擬器套件。如果你正在考慮採用驗證方法 和供應商嘗試運用公開和私人資料,嘗試不同的資料模型 運用驗證和 Firebase 安全性規則,或是設計登入使用者介面的原型, 無需部署有效服務就在本機上運作,會是個好主意。
驗證模擬器屬於本機模擬器套件的一部分, 可讓應用程式與模擬的資料庫內容和設定互動,例如: 以及選用的模擬專案資源 (函式、其他資料庫 和安全性規則)。
使用驗證模擬器只需完成幾個步驟:
將一行程式碼新增至應用程式的測試設定,即可與模擬器連線。
從本機專案目錄的根目錄中執行
firebase emulators:start
。使用本機模擬器套件 UI 進行互動式原型設計,或 用於非互動式測試的模擬器 REST API。
呼叫
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);
後續步驟
瀏覽指南,瞭解如何運用支援的瀏覽器登入及註冊使用者 身分識別及驗證服務