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

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

Topik ini menganggap 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 Autentikasi?

Emulator Authentication menyediakan emulasi lokal fidelitas tinggi dari layanan Firebase Authentication, menyediakan banyak fungsi yang ditemukan dalam produksi Firebase Authentication . 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 autentikasi token kustom
  • Periksa pesan terkait autentikasi di tab Emulator UI Logs.

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasikan produk untuk satu proyek Firebase.

Untuk memilih project 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.

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

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase 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 nyata, 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 memiliki sumber daya langsung. Project ini biasanya diakses melalui codelab 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 tersebut akan gagal.

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

  • Penyiapan yang lebih mudah, karena Anda dapat menjalankan emulator tanpa harus membuat project Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja mengaktifkan 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 berkomunikasi dengan emulator

SDK Android, iOS, dan web

Siapkan konfigurasi dalam aplikasi atau class pengujian Anda untuk berinteraksi dengan emulator Authentication sebagai berikut.

Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
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. Ketika emulator Otentikasi dikonfigurasi dan emulator lain berjalan, mereka secara otomatis bekerja bersama.

SDK Admin

Firebase Admin SDK secara otomatis terhubung ke emulator Authentication 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 emulator Cloud Functions dan Authentication. Variabel lingkungan akan ditetapkan 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 Authentication (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 terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan ID proyek yang sama dengan yang Anda atur menggunakan Firebase CLI . Anda dapat meneruskan ID proyek untuk initializeApp Aplikasi 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 lainnya, atau Firebase Admin SDK saat dikonfigurasi . Token ini akan ditolak oleh layanan Firebase produksi atau Firebase Admin SDK yang berjalan dalam mode produksi (mis. perilaku default tanpa langkah penyiapan yang dijelaskan di atas).

Mulai emulator

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

Untuk memulai emulator Authentication, 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 memulai pembuatan prototipe dengan menambahkan akun pengguna ke emulator Autentikasi dari aplikasi Anda menggunakan metode SDK Autentikasi, atau dengan 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 autentikasi email.

Dengan pengguna percobaan 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 reset kata sandi, emulator 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 email/kata sandi akun pengguna, 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 kata sandi dan email non-interaktif, urutan umumnya adalah sebagai berikut.

  1. Buat pengguna dengan endpoint REST signUp Authentication .
  2. Masuk pengguna menggunakan email dan kata 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:

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

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

Menggunakan UI Suite Emulator:

  1. Di UI Emulator Suite, klik tab Otentikasi .
  2. Klik tombol Tambahkan pengguna .
  3. Ikuti panduan pembuatan akun pengguna, isi bidang autentikasi 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 yang memeriksa pesan teks mereka.

Pengujian non-interaktif

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

Urutan tipikal adalah sebagai berikut.

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

SMS multi-faktor

Emulator Authentication mendukung pembuatan prototipe dan pengujian alur SMS multi-factor authentication (MFA) yang tersedia dalam produksi untuk iOS , Android , dan web .

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

Autentikasi penyedia identitas (IDP) pihak ketiga yang ditiru

Emulator Autentikasi 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 berikut:

  • 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 terbiasa dengan aliran mana pun - pengambilan kredensial manual vs yang dikelola Firebase SDK - yang ingin Anda gunakan. Emulator Authentication mendukung pengujian kedua pendekatan tersebut.

Menguji alur IDP berbasis Firebase SDK

Jika aplikasi Anda menggunakan aliran end-to-end Firebase SDK, 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 autentikasi dari aplikasi web yang memanggil metode signinWithPopup atau signInWithRedirect . Halaman masuk yang dilayani secara lokal ini juga muncul di aplikasi seluler, yang dirender oleh pustaka tampilan web platform Anda.

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

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.

Perlu diperhatikan 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 Token (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 mengotomatiskan klik pengguna pada halaman login 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.

Cara lainnya, Anda dapat memperbarui kode untuk menggunakan signInWithCredential (mis. di cabang kode) dan menggunakan alur autentikasi token dengan token ID tiruan untuk akun, bukan kredensial asli.

  1. Pasang kembali atau beri komentar pada bagian kode Anda yang mengambil idToken dari IDP; ini menghilangkan kebutuhan untuk memasukkan nama pengguna dan kata sandi asli selama pengujian Anda, dan mengurangi pengujian Anda dari kuota API dan batas tarif di IDP.
  2. Kedua, gunakan string JSON literal sebagai pengganti token untuk signInWithCredential . Menggunakan web SDK 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 menjadi string apa pun, meniru masuknya 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 otentikasi dengan Token Web JSON khusus menggunakan panggilan ke metode signInWithCustomToken pada platform yang didukung, seperti yang dijelaskan dalam dokumentasi produksi Authentication .

Bagaimana emulator Otentikasi berbeda dari produksi

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

Awan IAM

Firebase Emulator Suite tidak berusaha mereplikasi atau mengikuti perilaku terkait IAM apa pun untuk dijalankan. Emulator mematuhi Aturan Keamanan Firebase yang disediakan, tetapi dalam situasi di mana IAM biasanya akan digunakan, misalnya untuk menyetel akun layanan pemanggilan Cloud Functions 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, masuk dengan tautan email bergantung pada Firebase Dynamic Links, semua tautan tersebut akan dibuka di platform web (seluler).

Login 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.

Email / SMS masuk

Di 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 dijelaskan di atas , ia menghasilkan kode masuk dan menampilkannya ke terminal untuk digunakan dalam pengujian.

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

Otentikasi token kustom

Emulator Otentikasi tidak memvalidasi tanda tangan atau kedaluwarsa token kustom. 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 Autentikasi tidak mereplikasi fitur pembatasan laju produksi atau anti-penyalahgunaan.

Apa selanjutnya?