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 różnymi technikami i dostawcami uwierzytelniania, testujesz różne modele danych z danymi publicznymi i prywatnymi za pomocą Uwierzytelniania i reguł bezpieczeństwa Firebase lub prototypujesz projekty interfejsu logowania, praca lokalna 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(), 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 omówimy, jak uwierzytelniać 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 za pomocą 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 uwierzytelniania 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.