Pierwsze kroki z Uwierzytelnianiem Firebase w Flutter

Łączenie aplikacji z Firebase

Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli nie zostało to jeszcze zrobione.

Dodawanie Uwierzytelniania Firebase do aplikacji

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

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

    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. Aby włączyć logowanie za pomocą adresu e-mail i hasła oraz innych dostawców tożsamości, z których chcesz korzystać w swojej aplikacji, otwórz stronę Metoda logowania w sekcji Uwierzytelnianie Firebase.

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

Zanim omówimy, jak Twoja 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 wybierasz techniki i dostawców uwierzytelniania, testujesz różne modele danych z danymi publicznymi i prywatnymi za pomocą uwierzytelniania i reguł zabezpieczeń Firebase lub tworzysz prototypy interfejsu logowania, praca lokalna bez wdrażania usług na żywo może być świetnym pomysłem.

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 zabezpieczeń).

Korzystanie z emulatora uwierzytelniania wymaga wykonania tylko kilku czynności:

  1. Dodanie do konfiguracji testowej aplikacji wiersza kodu, który połączy ją z emulatorem.

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

  3. Korzystając z interfejsu Pakietu emulatorów lokalnych do interaktywnego prototypowania lub interfejsu API REST emulatora uwierzytelniania do testowania nieinteraktywnego.

  4. 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 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 obecną aplikacją Flutter. W wielu przypadkach musisz znać stan uwierzytelniania użytkownika, np. czy jest on zalogowany czy wylogowany.

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

Istnieją 3 metody monitorowania 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:

  • Natychmiast po zarejestrowaniu słuchacza.
  • Gdy użytkownik jest zalogowany.
  • Gdy bieżący użytkownik jest 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ą wywoływane, gdy:

  • Natychmiast po zarejestrowaniu słuchacza.
  • Gdy użytkownik jest zalogowany.
  • Gdy bieżący użytkownik jest wylogowany.
  • Gdy 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:

  • Natychmiast po zarejestrowaniu słuchacza.
  • Gdy użytkownik jest zalogowany.
  • Gdy bieżący użytkownik jest wylogowany.
  • Gdy zmieni się token bieżącego użytkownika.
  • Gdy wywoływane są te metody udostępniane przez FirebaseAuth.instance.currentUser:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Utrzymywanie stanu uwierzytelniania

Pakiety Firebase SDK na wszystkie platformy zapewniają gotową obsługę, która gwarantuje, że stan uwierzytelniania użytkownika jest zachowywany po ponownym uruchomieniu aplikacji lub odświeżeniu strony.

Na platformach natywnych, takich jak Android i iOS, to zachowanie nie jest konfigurowalne, a stan uwierzytelniania użytkownika będzie utrwalany na urządzeniu między ponownymi uruchomieniami aplikacji. Użytkownik może wyczyścić dane w pamięci podręcznej aplikacji w ustawieniach urządzenia. Spowoduje to usunięcie wszystkich zapisanych 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 za pomocą Persistence.LOCAL. W razie potrzeby możesz zmienić to domyślne zachowanie, aby stan uwierzytelniania był zachowywany 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.