將您的應用程式連接到 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 Local Emulator Suite。如果您正在選擇身份驗證技術和提供者,使用身份驗證和Firebase 安全性規則嘗試使用公共和私有資料的不同資料模型,或者對登入UI 設計進行原型設計,那麼能夠在本地工作而無需部署即時服務可能是一個好主意。
身份驗證模擬器是本機模擬器套件的一部分,它使您的應用程式能夠與模擬資料庫內容和配置以及可選的模擬項目資源(函數、其他資料庫和安全規則)進行互動。
使用身份驗證模擬器只需幾個步驟:
將一行程式碼新增至應用程式的測試配置以連接到模擬器。
從本地專案目錄的根目錄中,運行
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 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!');
}
});
發生以下情況時會觸發事件:
- 監聽器註冊後。
- 當用戶登入時。
- 噹噹前用戶註銷時。
- 當目前使用者的令牌發生變化時。
- 自訂聲明修改後,使用者登入或重新進行身份驗證。由此頒發的 ID 令牌將包含最新的聲明。
- 舊令牌過期後,現有使用者會話會刷新其 ID 令牌。
- 透過呼叫
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
強制刷新 ID 令牌。
有關更多詳細信息,請參閱向客戶端傳播自訂聲明
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 Admin SDK 或 Firebase 控制台停用或刪除User
idTokenChanges()
、 userChanges()
() 和authStateChanges()
也不會觸發。您必須使用FirebaseAuth.instance.currentUser.reload()
強制重新加載,這將導致user-disabled
或user-not-found
異常,您可以在應用程式碼中捕獲並處理該異常。
持續驗證狀態
適用於所有平台的 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);
下一步
瀏覽有關使用受支援的身份和身份驗證服務登入和註冊用戶的指南。