Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Hubungkan aplikasi Anda ke Emulator Otentikasi

Sebelum menggunakan emulator Authentication dengan aplikasi Anda, pastikan Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite , dan bahwa Anda menginstal dan mengonfigurasi Local Emulator Suite serta meninjau perintah CLI -nya .

Topik ini mengasumsikan Anda sudah terbiasa mengembangkan solusi Firebase Authentication untuk produksi. Jika perlu, tinjau dokumentasi untuk kombinasi platform dan teknik autentikasi Anda .

Apa yang dapat saya lakukan dengan emulator Otentikasi?

Emulator Authentication menyediakan emulasi lokal fidelitas tinggi dari layanan Firebase Authentication, menyediakan banyak fungsi yang ditemukan di Firebase Authentication produksi . Dipasangkan dengan platform Apple, Android dan Web Firebase SDK, emulator memungkinkan Anda:

  • Buat, perbarui, dan kelola akun pengguna yang ditiru untuk menguji email/sandi, nomor telepon/SMS, multi-faktor SMS, dan autentikasi penyedia identitas pihak ketiga (misalnya Google)
  • Lihat dan edit pengguna yang ditiru
  • Prototipe sistem otentikasi token khusus
  • Periksa pesan terkait autentikasi di tab Log UI Emulator.

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.

Untuk memilih proyek yang akan digunakan, sebelum Anda memulai emulator, di CLI jalankan firebase use di direktori kerja Anda. Atau, Anda dapat meneruskan flag --project ke setiap perintah emulator.

Suite Emulator Lokal mendukung emulasi proyek Firebase nyata dan proyek demo .

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase yang sebenarnya adalah proyek yang Anda buat dan konfigurasikan (kemungkinan besar melalui konsol Firebase).

Proyek nyata memiliki sumber daya langsung, seperti instance database, keranjang penyimpanan, fungsi, atau sumber daya lain yang Anda siapkan untuk proyek Firebase tersebut.

Saat bekerja dengan proyek Firebase yang sebenarnya, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung.

Untuk produk apa pun yang tidak Anda tiru, aplikasi dan kode Anda akan berinteraksi dengan sumber daya langsung (instance database, keranjang penyimpanan, fungsi, dll.).

Demo

Proyek demo Firebase tidak memiliki konfigurasi Firebase nyata dan tidak ada sumber daya langsung. Proyek-proyek ini biasanya diakses melalui codelabs atau tutorial lainnya.

ID proyek untuk proyek demo memiliki awalan demo- .

Saat bekerja dengan proyek demo Firebase, aplikasi dan kode Anda hanya berinteraksi dengan emulator . Jika aplikasi Anda mencoba berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode itu akan gagal.

Kami menyarankan Anda menggunakan proyek demo sedapat mungkin. Manfaat meliputi:

  • Penyiapan lebih mudah, karena Anda dapat menjalankan emulator tanpa pernah membuat proyek Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja memanggil sumber daya (produksi) yang tidak ditiru, tidak ada kemungkinan perubahan data, penggunaan, dan penagihan
  • Dukungan offline yang lebih baik, karena tidak perlu mengakses internet untuk mengunduh konfigurasi SDK Anda.

Instrumen aplikasi Anda untuk berbicara dengan emulator

SDK Android, iOS, dan web

Siapkan konfigurasi dalam aplikasi atau kelas pengujian Anda untuk berinteraksi dengan emulator Otentikasi sebagai berikut.

Android
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Cepat
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web version 9

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://localhost:9099");

Web version 8

const auth = firebase.auth();
auth.useEmulator("http://localhost:9099");

Tidak diperlukan penyiapan tambahan untuk membuat prototipe dan menguji interaksi antara Authentication dan Cloud Functions atau Aturan Keamanan Firebase untuk Cloud Firestore atau Realtime Database. Saat emulator Otentikasi dikonfigurasi dan emulator lain sedang berjalan, mereka secara otomatis bekerja bersama.

SDK Admin

Firebase Admin SDK secara otomatis terhubung ke emulator Otentikasi saat variabel lingkungan FIREBASE_AUTH_EMULATOR_HOST disetel.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Perhatikan bahwa emulator Cloud Functions secara otomatis mengetahui emulator Authentication sehingga Anda dapat melewati langkah ini saat menguji integrasi antara Cloud Functions dan emulator Authentication. Variabel lingkungan akan disetel secara otomatis untuk Admin SDK di Cloud Functions.

Dengan set variabel lingkungan, Firebase Admin SDK akan menerima Token ID yang tidak ditandatangani dan cookie sesi yang dikeluarkan oleh emulator Otentikasi (masing-masing melalui metode createSessionCookie verifyIdToken untuk memfasilitasi pengembangan dan pengujian lokal. Harap pastikan untuk tidak mengatur variabel lingkungan dalam produksi.

Jika Anda ingin kode Admin SDK Anda terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan ID proyek yang sama dengan yang Anda tetapkan menggunakan Firebase CLI . Anda dapat meneruskan ID proyek ke initializeApp secara langsung atau menyetel variabel lingkungan GCLOUD_PROJECT .

SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabel Lingkungan
export GCLOUD_PROJECT="your-project-id"

Token ID

Untuk alasan keamanan, emulator Authentication mengeluarkan token ID yang tidak ditandatangani , yang hanya diterima oleh emulator Firebase lain, atau Firebase Admin SDK saat dikonfigurasi . Token ini akan ditolak oleh layanan Firebase produksi atau Firebase Admin SDK yang berjalan dalam mode produksi (misalnya, perilaku default tanpa langkah penyiapan yang dijelaskan di atas).

Mulai emulatornya

Anda dapat menggunakan emulator Otentikasi secara interaktif melalui UI Emulator Suite dan secara non-interaktif melalui antarmuka REST lokalnya. Bagian berikut mencakup kasus penggunaan interaktif dan non-interaktif.

Untuk memulai emulator Otentikasi, antarmuka REST, dan UI Emulator Suite, jalankan:

firebase emulators:start

Untuk autentikasi anonim , aplikasi Anda dapat menggunakan logika masuk untuk platform Anda ( iOS , Android , web ).

Untuk autentikasi email/sandi , Anda dapat mulai membuat prototipe dengan menambahkan akun pengguna ke emulator Authentication dari aplikasi Anda menggunakan metode Authentication SDK, atau dengan menggunakan Emulator Suite UI.

  1. Di UI Emulator Suite, klik tab Otentikasi .
  2. Klik tombol Tambahkan pengguna .
  3. Ikuti wizard pembuatan akun pengguna, isi bidang otentikasi email.

Dengan pengguna uji yang dibuat, aplikasi Anda dapat membuat pengguna masuk dan keluar dengan logika SDK untuk platform Anda ( iOS , Android , web ).

Untuk menguji verifikasi email/masuk dengan alur tautan email, emulator mencetak URL ke terminal tempat firebase emulators:start dieksekusi.

i  To verify the email address customer@ex.com, follow this link:
http://localhost:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key

Tempel tautan ke browser Anda untuk menyimulasikan peristiwa verifikasi, dan periksa apakah verifikasi berhasil.

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

Untuk menguji penyetelan ulang sandi, emulator akan mencetak URL serupa, termasuk parameter newPassword (yang dapat Anda ubah sesuai kebutuhan), ke terminal.

http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

Pengujian non-interaktif

Alih-alih menggunakan UI Emulator Suite atau kode klien untuk mengelola akun pengguna email/sandi, Anda dapat menulis skrip penyiapan pengujian yang memanggil REST API untuk membuat dan menghapus akun pengguna dan mengambil kode verifikasi email out-of-band untuk mengisi verifikasi email emulator URL. Ini membuat platform dan kode pengujian terpisah dan memungkinkan Anda menguji secara non-interaktif.

Untuk alur pengujian email dan sandi non-interaktif, urutan umumnya adalah sebagai berikut.

  1. Buat pengguna dengan endpoint REST pendaftaran Otentikasi .
  2. Masuk pengguna menggunakan email dan sandi untuk melakukan tes.
  3. Jika berlaku untuk pengujian Anda, ambil kode verifikasi email out-of-band yang tersedia dari endpont REST khusus emulator .
  4. Siram catatan pengguna dengan titik akhir REST khusus emulator untuk menghapus data.

Otentikasi telepon/SMS yang ditiru

Untuk otentikasi telepon, emulator Auth tidak mendukung:

  • reCAPTCHA dan APN mengalir. Setelah dikonfigurasi untuk berinteraksi dengan emulator, SDK klien menonaktifkan metode verifikasi ini dengan cara yang mirip dengan yang dijelaskan untuk pengujian integrasi ( iOS , Android , web ).
  • Uji nomor telepon dengan kode yang telah dikonfigurasi sebelumnya di Firebase console.

Jika tidak, dalam hal kode klien, alur autentikasi telepon/SMS identik dengan yang dijelaskan untuk produksi ( iOS , Android , web ).

Menggunakan UI Emulator Suite:

  1. Di UI Emulator Suite, klik tab Otentikasi .
  2. Klik tombol Tambahkan pengguna .
  3. Ikuti panduan pembuatan akun pengguna, isi bidang otentikasi telepon.

Namun, untuk alur autentikasi telepon, emulator TIDAK akan memicu pengiriman pesan teks apa pun, karena menghubungi operator di luar jangkauan dan tidak cocok untuk pengujian lokal! Sebagai gantinya, emulator mencetak kode yang akan dikirim melalui SMS ke terminal yang sama tempat Anda menjalankan firebase emulators:start ; masukkan kode ini ke aplikasi untuk mensimulasikan pengguna memeriksa pesan teks mereka.

Pengujian non-interaktif

Untuk pengujian autentikasi telepon non-interaktif, gunakan REST API emulator Otentikasi untuk mengambil kode SMS yang tersedia. Perhatikan bahwa kodenya berbeda setiap kali Anda memulai alur.

Urutan tipikal adalah sebagai berikut.

  1. Panggil platform signInWithPhoneNumber untuk memulai proses verifikasi.
  2. Ambil kode verifikasi menggunakan endpoint REST khusus emulator .
  3. Hubungi confirmationResult.confirm(code) seperti biasa dengan kode verifikasi.

SMS multifaktor

Emulator Autentikasi mendukung pembuatan prototipe dan pengujian alur autentikasi multi-faktor (MFA) SMS yang tersedia dalam produksi untuk iOS , Android , dan web .

Saat Anda menambahkan pengguna tiruan ke emulator, Anda dapat mengaktifkan MFA dan mengonfigurasi satu atau beberapa nomor telepon ke mana pesan SMS faktor kedua akan dikirim. Pesan dikeluarkan ke terminal yang sama tempat Anda menjalankan firebase emulators:start , dan tersedia dari antarmuka REST.

Otentikasi penyedia identitas pihak ketiga (IDP) yang ditiru

Emulator Otentikasi memungkinkan Anda menguji banyak alur autentikasi pihak ketiga di iOS, Android, atau aplikasi web Anda tanpa perubahan dari kode produksi. Untuk contoh alur autentikasi, lihat dokumentasi untuk berbagai kombinasi penyedia dan platform yang dapat Anda gunakan di aplikasi .

Secara umum, Anda dapat menggunakan Firebase SDK untuk mengautentikasi dengan salah satu dari dua cara:

  • Aplikasi Anda memungkinkan SDK menangani seluruh proses secara menyeluruh, termasuk semua interaksi dengan penyedia IDP pihak ketiga untuk mengambil kredensial.
  • Aplikasi Anda secara manual mengambil kredensial dari penyedia pihak ketiga menggunakan SDK pihak tersebut dan meneruskan kredensial tersebut ke Authentication SDK.

Sekali lagi, periksa tautan dokumentasi di atas dan pastikan Anda memahami alur mana pun - pengambilan kredensial yang dikelola Firebase SDK vs. manual - yang ingin Anda gunakan. Emulator Otentikasi mendukung pengujian salah satu pendekatan.

Menguji alur IDP berbasis SDK Firebase

Jika aplikasi Anda menggunakan alur end-to-end SDK Firebase, seperti OAuthProvider untuk masuk dengan Microsoft, GitHub, atau Yahoo, untuk pengujian interaktif, emulator Authentication menyajikan versi lokal dari halaman masuk yang sesuai untuk membantu Anda menguji otentikasi dari aplikasi web yang memanggil metode signinWithPopup atau signInWithRedirect . Laman masuk yang disajikan secara lokal ini juga muncul di aplikasi seluler, yang dirender oleh pustaka tampilan web platform Anda.

Emulator membuat akun pengguna pihak ketiga tiruan dan kredensial sesuai kebutuhan saat alur berjalan.

Menguji alur IDP dengan pengambilan kredensial manual

Jika Anda menggunakan teknik masuk "manual" dan memanggil metode signInWithCredentials platform Anda, maka, seperti biasa, aplikasi Anda akan meminta masuk pihak ketiga yang sebenarnya dan mengambil kredensial pihak ketiga yang sebenarnya.

Perhatikan bahwa emulator hanya mendukung autentikasi signInWithCredential untuk kredensial yang diambil dari Google Sign-In, Apple, dan penyedia lain yang menggunakan token ID yang diimplementasikan sebagai JSON Web Tokens (JWT). Token akses (misalnya yang disediakan oleh Facebook atau Twitter, yang bukan JWT) tidak didukung. Bagian selanjutnya membahas alternatif dalam kasus ini.

Pengujian non-interaktif

Salah satu pendekatan untuk pengujian non-interaktif adalah dengan mengotomatiskan klik pengguna pada halaman masuk yang disajikan oleh emulator. Untuk aplikasi web, gunakan antarmuka kontrol seperti WebDriver. Untuk seluler, gunakan alat uji UI dari platform Anda, seperti Espresso atau Xcode.

Atau, Anda dapat memperbarui kode Anda untuk menggunakan signInWithCredential (misalnya di cabang kode) dan menggunakan alur autentikasi token dengan token ID tiruan untuk akun, bukan kredensial nyata.

  1. Rewire atau komentari bagian dari kode Anda yang mengambil idTokens dari IDP; ini menghilangkan kebutuhan untuk memasukkan nama pengguna dan kata sandi asli selama pengujian Anda, dan membebaskan pengujian Anda dari kuota API dan batas tarif di IDP.
  2. Kedua, gunakan string JSON literal sebagai pengganti token untuk signInWithCredential . Menggunakan SDK web sebagai contoh, Anda dapat mengubah kode menjadi:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Saat digunakan dengan emulator, kode ini akan berhasil mengautentikasi pengguna dengan email foo@example.com di Google. Pikirkan sub bidang sebagai kunci utama, yang dapat diubah ke string apa pun, mengejek masuk ke pengguna yang berbeda. Anda dapat mengganti firebase.auth.GoogleAuthProvider dengan, misalnya, new firebase.auth.OAuthProvider('yahoo.com') atau ID penyedia lain yang ingin Anda tiru.

Otentikasi token khusus yang ditiru

Emulator Authentication menangani autentikasi dengan Token Web JSON kustom menggunakan panggilan ke metode signInWithCustomToken pada platform yang didukung, seperti yang dijelaskan dalam dokumentasi Authentication produksi .

Bagaimana emulator Otentikasi berbeda dari produksi

Emulator Firebase Authentication menyimulasikan banyak fitur produk produksi. Namun, karena segala jenis sistem autentikasi sangat bergantung pada keamanan di berbagai tingkat (perangkat, penyedia pihak ketiga, Firebase, dll), sulit bagi emulator untuk membuat ulang semua alur dengan benar.

Cloud IAM

Firebase Emulator Suite tidak mencoba mereplikasi atau menghormati perilaku terkait IAM apa pun untuk dijalankan. Emulator mematuhi Aturan Keamanan Firebase yang disediakan, tetapi dalam situasi di mana IAM biasanya digunakan, misalnya untuk mengatur Cloud Functions yang memanggil akun layanan dan dengan demikian izin, emulator tidak dapat dikonfigurasi dan akan menggunakan akun yang tersedia secara global di mesin pengembang Anda, mirip dengan menjalankan skrip lokal secara langsung.

Karena pada platform seluler, proses masuk tautan email bergantung pada Firebase Dynamic Links, semua tautan tersebut akan dibuka di platform web (seluler).

Masuk pihak ketiga

Untuk alur masuk pihak ketiga, Firebase Authentication mengandalkan kredensial aman dari penyedia pihak ketiga seperti Twitter dan Github.

Kredensial nyata dari penyedia OpenID Connect seperti Google dan Apple diterima oleh emulator Otentikasi. Kredensial dari penyedia non-OpenID Connect tidak didukung.

Masuk email / SMS

Dalam aplikasi produksi, alur masuk email dan SMS melibatkan operasi asinkron di mana pengguna memeriksa pesan yang diterima dan memasukkan kode masuk ke antarmuka masuk. Emulator Otentikasi tidak mengirim email atau pesan SMS apa pun, tetapi seperti yang dijelaskan di atas , emulator ini menghasilkan kode masuk dan mengeluarkannya ke terminal untuk digunakan dalam pengujian.

Emulator tidak mendukung kemampuan untuk menentukan nomor telepon percobaan dengan kode login tetap seperti yang dapat dilakukan menggunakan konsol Firebase.

Otentikasi token khusus

Emulator Otentikasi tidak memvalidasi tanda tangan atau kedaluwarsa token khusus. Ini memungkinkan Anda untuk menggunakan token buatan tangan dan menggunakan kembali token tanpa batas waktu dalam skenario pembuatan prototipe dan pengujian.

Pembatasan nilai / anti-penyalahgunaan

Emulator Otentikasi tidak mereplikasi fitur pembatasan tingkat produksi atau anti-penyalahgunaan.

Apa selanjutnya?