Pierwsze kroki z uwierzytelnianiem Firebase w Flutterze

Łączenie aplikacji z Firebase

Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli jeszcze tego nie zrobisz.

Dodawanie Uwierzytelniania Firebase do aplikacji

  1. W głównym katalogu projektu Fluttera uruchom to polecenie, aby zainstalować wtyczkę:

    flutter pub add firebase_auth
    
  2. Po zakończeniu ponownie skompiluj aplikację Fluttera:

    flutter run
    
  3. Zaimportuj wtyczkę w kodzie Dart:

    import 'package:firebase_auth/firebase_auth.dart';
    

Aby korzystać z dostawcy uwierzytelniania, musisz go włączyć w konsoli Firebase (otwórz kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Możesz włączyć logowanie za pomocą e-maila i hasła oraz wielu innych dostawców tożsamości, których chcesz używać w aplikacji.

(Opcjonalnie) Prototypowanie i testowanie za pomocą Pakietu emulatorów lokalnych Firebase

Zanim omówimy, jak aplikacja uwierzytelnia użytkowników, przedstawimy zestaw narzędzi, których możesz używać do prototypowania i testowania funkcji uwierzytelniania: Pakiet emulatorów lokalnych Firebase. Jeśli zastanawiasz się nad wyborem technik i dostawców uwierzytelniania, testujesz różne modele danych z danymi publicznymi i prywatnymi za pomocą Uwierzytelniania i reguł bezpieczeństwa Firebase lub prototypujesz projekty interfejsu logowania, możliwość pracy lokalnej bez wdrażania usług na żywo może być świetnym rozwiązaniem.

Emulator uwierzytelniania jest częścią Pakietu emulatorów lokalnych, który umożliwia aplikacji interakcję z emulowaną zawartością bazy danych i konfiguracją, a także opcjonalnie z emulowanymi zasobami projektu (funkcjami, innymi bazami danych i regułami bezpieczeństwa).

Korzystanie z emulatora uwierzytelniania obejmuje tylko kilka kroków:

  1. Dodanie wiersza kodu do konfiguracji testowej aplikacji, aby połączyć się z emulatorem.

  2. Uruchomienie polecenia firebase emulators:start w głównym katalogu projektu lokalnego.

  3. Używanie interfejsu Pakietu emulatorów lokalnych do interaktywnego prototypowania lub interfejsu REST API emulatora uwierzytelniania do testowania nieinteraktywnego.

  4. Wywołanie funkcji useAuthEmulator() w celu określenia adresu i portu emulatora:

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

Szczegółowy przewodnik znajdziesz w artykule Łączenie aplikacji z emulatorem uwierzytelniania. Więcej informacji znajdziesz we wprowadzeniu do Pakietu emulatorów lokalnych.

Teraz przejdźmy do uwierzytelniania użytkowników.

Sprawdzanie bieżącego stanu uwierzytelniania

Uwierzytelnianie Firebase udostępnia wiele metod i narzędzi, które umożliwiają zintegrowanie bezpiecznego uwierzytelniania z nową lub istniejącą aplikacją Fluttera. W wielu przypadkach musisz znać stan uwierzytelniania użytkownika, np. czy jest zalogowany czy wylogowany.

Uwierzytelnianie Firebase umożliwia subskrybowanie tego stanu w czasie rzeczywistym za pomocą Stream. Po wywołaniu strumień natychmiast udostępnia zdarzenie z bieżącym stanem uwierzytelniania użytkownika, a następnie udostępnia kolejne zdarzenia, gdy stan uwierzytelniania się zmieni.

Istnieją 3 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ą wywoływane, gdy:

  • bezpośrednio po zarejestrowaniu odbiornika;
  • użytkownik się zaloguje;
  • bieżący użytkownik się wyloguje.

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ą wywoływane, gdy:

  • bezpośrednio po zarejestrowaniu odbiornika;
  • użytkownik się zaloguje;
  • bieżący użytkownik się wyloguje;
  • zmieni się token bieżącego użytkownika.

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ą wywoływane, gdy:

  • bezpośrednio po zarejestrowaniu odbiornika;
  • użytkownik się zaloguje;
  • bieżący użytkownik się wyloguje;
  • zmieni się token bieżącego użytkownika;
  • zostaną wywołane te metody udostępniane przez FirebaseAuth.instance.currentUser:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Utrzymywanie stanu uwierzytelniania

Pakiety SDK Firebase na wszystkie platformy zapewniają gotową obsługę utrzymywania stanu uwierzytelniania użytkownika po ponownym uruchomieniu aplikacji lub ponownym załadowaniu strony.

Na platformach natywnych, takich jak Android i iOS, to zachowanie nie jest konfigurowalne, a stan uwierzytelniania użytkownika będzie utrzymywany na urządzeniu między ponownymi uruchomieniami aplikacji. Użytkownik może wyczyścić dane aplikacji w pamięci podręcznej za pomocą ustawień urządzenia, co spowoduje usunięcie wszystkich przechowywanych stanów.

Na platformach internetowych stan uwierzytelniania użytkownika jest przechowywany w IndexedDB. Możesz zmienić trwałość, aby przechowywać dane w pamięci lokalnej używając Persistence.LOCAL. W razie potrzeby możesz zmienić to domyślne zachowanie, aby utrzymywać stan uwierzytelniania tylko w bieżącej sesji lub wcale. Aby skonfigurować te ustawienia, wywołaj tę metodę: FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);. Możesz nadal aktualizować trwałość każdej instancji 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 uwierzytelniania i tożsamości.