Memulai Firebase Authentication di Flutter

Menghubungkan aplikasi ke Firebase

Instal dan inisialisasi Firebase SDK untuk Flutter jika Anda belum melakukannya.

Menambahkan Firebase Authentication ke aplikasi

  1. Dari root project Flutter Anda, jalankan perintah berikut untuk menginstal plugin:

    flutter pub add firebase_auth
    
  2. Setelah selesai, build ulang aplikasi Flutter Anda:

    flutter run
    
  3. Impor plugin dalam kode Dart Anda:

    import 'package:firebase_auth/firebase_auth.dart';
    

Jika ingin menggunakan suatu penyedia autentikasi, Anda harus mengaktifkannya di Firebase console. Buka halaman Metode Login di bagian Firebase Authentication untuk mengaktifkan login dengan Email/Sandi dan penyedia identitas lain mana pun yang Anda inginkan untuk aplikasi Anda.

(Opsional) Membuat prototipe dan melakukan pengujian dengan Firebase Local Emulator Suite

Sebelum membahas cara aplikasi Anda mengautentikasi pengguna, kami akan memperkenalkan serangkaian alat yang dapat digunakan untuk membuat prototipe dan menguji fungsionalitas Authentication: Firebase Local Emulator Suite. Jika Anda sedang memilih teknik dan penyedia autentikasi, mencoba berbagai model data dengan data publik dan pribadi menggunakan Authentication dan Aturan Keamanan Firebase, atau membuat prototipe desain UI login, akan sangat bermanfaat jika Anda bisa bekerja secara lokal tanpa men-deploy layanan langsung.

Emulator Authentication adalah bagian dari Local Emulator Suite, yang memungkinkan aplikasi Anda berinteraksi dengan konten dan konfigurasi database yang diemulasi, serta, jika diinginkan, dengan resource project yang diemulasi (fungsi, database lain, dan aturan keamanan).

Hanya diperlukan beberapa langkah untuk menggunakan emulator Authentication:

  1. Menambahkan satu baris kode ke konfigurasi pengujian aplikasi untuk menghubungkannya ke emulator.

  2. Menjalankan firebase emulators:start dari root direktori project lokal Anda.

  3. Menggunakan UI Local Emulator Suite untuk pembuatan prototipe yang interaktif, atau REST API emulator Authentication untuk pengujian noninteraktif.

  4. Panggil useAuthEmulator() untuk menentukan alamat dan port emulator:

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

Panduan terperinci tersedia di bagian Menghubungkan aplikasi Anda ke emulator Authentication. Untuk informasi selengkapnya, lihat Pengantar Local Emulator Suite.

Sekarang, mari kita lanjutkan dengan cara mengautentikasi pengguna.

Memeriksa status autentikasi saat ini

Firebase Auth menyediakan banyak metode dan utilitas untuk memungkinkan Anda mengintegrasikan autentikasi aman ke dalam aplikasi Flutter baru atau yang sudah ada. Dalam banyak kasus, Anda perlu mengetahui status autentikasi pengguna, seperti apakah mereka sudah login atau logout.

Dengan Firebase Auth, Anda dapat berlangganan status ini secara real time melalui Stream. Setelah dipanggil, stream memberikan peristiwa langsung dari status autentikasi pengguna saat ini, lalu memberikan peristiwa berikutnya setiap kali status autentikasi berubah.

Ada tiga metode untuk memproses perubahan status autentikasi:

authStateChanges()

Untuk berlangganan perubahan ini, panggil metode authStateChanges() pada instance FirebaseAuth Anda:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Peristiwa diaktifkan saat hal berikut terjadi:

  • Tepat setelah pemroses didaftarkan.
  • Saat pengguna login.
  • Saat pengguna saat ini logout.

idTokenChanges()

Untuk berlangganan perubahan ini, panggil metode idTokenChanges() pada instance FirebaseAuth Anda:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Peristiwa diaktifkan saat hal berikut terjadi:

  • Tepat setelah pemroses didaftarkan.
  • Saat pengguna login.
  • Saat pengguna saat ini logout.
  • Saat ada perubahan pada token pengguna saat ini.

userChanges()

Untuk berlangganan perubahan ini, panggil metode userChanges() pada instance FirebaseAuth Anda:

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Peristiwa diaktifkan saat hal berikut terjadi:

  • Tepat setelah pemroses didaftarkan.
  • Saat pengguna login.
  • Saat pengguna saat ini logout.
  • Saat ada perubahan pada token pengguna saat ini.
  • Saat metode yang disediakan oleh FirebaseAuth.instance.currentUser berikut dipanggil:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Mempertahankan status autentikasi

Firebase SDK untuk semua platform memberikan dukungan siap pakai untuk memastikan status autentikasi pengguna dipertahankan setiap kali aplikasi dimulai ulang atau saat halaman dimuat ulang.

Pada platform native seperti Android & iOS, perilaku ini tidak dapat dikonfigurasi dan status autentikasi pengguna akan dipertahankan pada perangkat setiap kali aplikasi dimulai ulang. Pengguna dapat menghapus data aplikasi yang di-cache menggunakan setelan perangkat, yang akan menghapus total status yang ada yang sedang disimpan.

Di platform web, status autentikasi pengguna disimpan di IndexedDB. Anda dapat mengubah persistensi untuk menyimpan data di penyimpanan lokal menggunakan Persistence.LOCAL. Jika diperlukan, Anda dapat mengubah perilaku default ini agar hanya mempertahankan status autentikasi untuk sesi saat ini, atau tidak sama sekali. Untuk mengonfigurasi setelan ini, panggil metode FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); berikut. Anda tetap dapat memperbarui persistensi untuk setiap instance Auth menggunakan 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);

Langkah Berikutnya

Pelajari panduan tentang cara memproses login dan pendaftaran pengguna dengan layanan identitas dan autentikasi yang didukung.