Połącz swoją aplikację z Firebase
Zainstaluj i zainicjuj zestawy SDK Firebase dla Flutter , jeśli jeszcze tego nie zrobiłeś.
Dodaj Uwierzytelnianie Firebase do swojej aplikacji
W katalogu głównym projektu Flutter uruchom następujące polecenie, aby zainstalować wtyczkę:
flutter pub add firebase_auth
Po zakończeniu odbuduj aplikację Flutter:
flutter run
Zaimportuj wtyczkę w kodzie Dart:
import 'package:firebase_auth/firebase_auth.dart';
Aby korzystać z dostawcy uwierzytelniania, musisz go włączyć w konsoli Firebase . Przejdź do strony Metoda logowania w sekcji Uwierzytelnianie Firebase, aby włączyć logowanie przez e-mail/hasło i innych dostawców tożsamości, których chcesz dla swojej aplikacji.
(Opcjonalnie) Prototypowanie i testowanie za pomocą pakietu Firebase Local Emulator Suite
Zanim zaczniemy mówić o tym, jak Twoja aplikacja uwierzytelnia użytkowników, przedstawmy zestaw narzędzi, których możesz użyć do prototypowania i testowania funkcjonalności uwierzytelniania: Firebase Local Emulator Suite. Jeśli decydujesz się między technikami i dostawcami uwierzytelniania, wypróbowujesz różne modele danych z danymi publicznymi i prywatnymi za pomocą uwierzytelniania i reguł zabezpieczeń Firebase lub tworzysz prototypy projektów interfejsu logowania, możliwość pracy lokalnej bez wdrażania usług na żywo może być świetnym pomysłem .
Emulator uwierzytelniania jest częścią lokalnego pakietu emulatorów, który umożliwia aplikacji interakcję z zawartością i konfiguracją emulowanej bazy danych, a także opcjonalnie z emulowanymi zasobami projektu (funkcjami, innymi bazami danych i regułami zabezpieczeń).
Korzystanie z emulatora uwierzytelniania obejmuje tylko kilka kroków:
Dodanie wiersza kodu do konfiguracji testowej aplikacji, aby połączyć się z emulatorem.
Z katalogu głównego lokalnego katalogu projektu uruchom
firebase emulators:start
.Korzystanie z interfejsu użytkownika lokalnego pakietu emulatorów do interaktywnego prototypowania lub interfejsu API REST emulatora uwierzytelniania do testowania nieinteraktywnego.
Wywołaj
useAuthEmulator()
, aby określić adres i port emulatora:Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // Ideal time to initialize await FirebaseAuth.instance.useAuthEmulator('localhost', 9099); //... }
Szczegółowy przewodnik jest dostępny w artykule Połącz swoją aplikację z emulatorem uwierzytelniania . Aby uzyskać więcej informacji, zobacz wprowadzenie do lokalnego pakietu emulatorów .
Przejdźmy teraz do uwierzytelniania użytkowników.
Sprawdź aktualny stan uwierzytelniania
Firebase Auth udostępnia wiele metod i narzędzi umożliwiających zintegrowanie bezpiecznego uwierzytelniania z nową lub istniejącą aplikacją Flutter. W wielu przypadkach będziesz potrzebować informacji o stanie uwierzytelniania użytkownika, na przykład o tym, czy jest zalogowany, czy wylogowany.
Uwierzytelnianie Firebase umożliwia subskrybowanie tego stanu w czasie rzeczywistym za pomocą Stream
. Po wywołaniu strumień zapewnia natychmiastowe zdarzenie bieżącego stanu uwierzytelniania użytkownika, a następnie udostępnia kolejne zdarzenia, gdy stan uwierzytelniania ulegnie zmianie.
Istnieją trzy metody nasłuchiwania zmian stanu uwierzytelniania:
authStateChanges()
Aby zasubskrybować te zmiany, wywołaj metodę authStateChanges()
w instancji FirebaseAuth
:
FirebaseAuth.instance
.authStateChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
Zdarzenia są uruchamiane, gdy wystąpią następujące zdarzenia:
- Zaraz po zarejestrowaniu słuchacza.
- Gdy użytkownik jest zalogowany.
- Gdy bieżący użytkownik zostanie wylogowany.
idTokenChanges()
Aby zasubskrybować te zmiany, wywołaj metodę idTokenChanges()
w instancji FirebaseAuth
:
FirebaseAuth.instance
.idTokenChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
Zdarzenia są uruchamiane, gdy wystąpią następujące zdarzenia:
- Zaraz po zarejestrowaniu słuchacza.
- Gdy użytkownik jest zalogowany.
- Gdy bieżący użytkownik zostanie wylogowany.
- Gdy następuje zmiana w tokenie bieżącego użytkownika.
- Użytkownik loguje się lub ponownie uwierzytelnia po zmodyfikowaniu oświadczeń niestandardowych. Wystawiony w wyniku token identyfikatora będzie zawierał najnowsze oświadczenia.
- Istniejąca sesja użytkownika otrzymuje swój token ID odświeżony po wygaśnięciu starszego tokena.
- Token identyfikatora jest wymuszany przez wywołanie
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
.
Aby uzyskać więcej informacji, zobacz Propagowanie niestandardowych oświadczeń do klienta
userChanges()
Aby zasubskrybować te zmiany, wywołaj metodę userChanges()
w instancji FirebaseAuth
:
FirebaseAuth.instance
.userChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
Zdarzenia są uruchamiane, gdy wystąpią następujące zdarzenia:
- Zaraz po zarejestrowaniu słuchacza.
- Gdy użytkownik jest zalogowany.
- Gdy bieżący użytkownik zostanie wylogowany.
- Gdy następuje zmiana w tokenie bieżącego użytkownika.
- Gdy wywoływane są następujące metody udostępniane przez
FirebaseAuth.instance.currentUser
:-
reload()
-
unlink()
-
updateEmail()
-
updatePassword()
-
updatePhoneNumber()
-
updateProfile()
-
idTokenChanges()
, userChanges()
i authStateChanges()
również nie zostaną uruchomione, jeśli wyłączysz lub usuniesz User
za pomocą pakietu Firebase Admin SDK lub konsoli Firebase. Będziesz musiał wymusić ponowne załadowanie przy użyciu FirebaseAuth.instance.currentUser.reload()
, co spowoduje wyjątek user-disabled
przez user-not-found
lub wyjątek nieznaleziony przez użytkownika, który możesz przechwycić i obsłużyć w kodzie aplikacji.
Trwały stan uwierzytelniania
Pakiety SDK Firebase dla wszystkich platform zapewniają gotową obsługę, dzięki czemu stan uwierzytelniania użytkownika jest utrwalany po ponownym uruchomieniu aplikacji lub ponownym załadowaniu strony.
Na platformach natywnych, takich jak Android i iOS, tego zachowania nie można skonfigurować, a stan uwierzytelniania użytkownika będzie utrwalany na urządzeniu między ponownymi uruchomieniami aplikacji. Użytkownik może wyczyścić dane z pamięci podręcznej aplikacji, korzystając z ustawień urządzenia, co spowoduje wyczyszczenie istniejącego zapisanego stanu.
Na platformach internetowych stan uwierzytelniania użytkownika jest przechowywany w IndexedDB . Możesz zmienić trwałość, aby przechowywać dane w magazynie lokalnym , używając Persistence.LOCAL
. W razie potrzeby możesz zmienić to domyślne zachowanie, aby zachować tylko stan uwierzytelniania dla bieżącej sesji lub wcale. Aby skonfigurować te ustawienia, wywołaj następującą metodę FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);
. Nadal możesz zaktualizować trwałość dla każdego wystąpienia Auth za pomocą 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);
Następne kroki
Zapoznaj się z przewodnikami dotyczącymi logowania i rejestrowania użytkowników za pomocą obsługiwanych usług tożsamości i uwierzytelniania.