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 .

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, dan masuk dengan penyedia identitas pihak ketiga (seperti Google)
  • Lihat dan edit pengguna yang ditiru
  • 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 Otentikasi

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)

versi web 9

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

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

versi web 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 secara otomatis disetel 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.

Saat menghubungkan ke emulator Otentikasi, Anda harus menentukan ID proyek. Anda dapat meneruskan ID proyek ke initializeApp secara langsung atau menyetel variabel lingkungan GCLOUD_PROJECT . Perhatikan bahwa Anda tidak perlu menggunakan ID proyek Firebase yang sebenarnya; emulator Otentikasi akan menerima ID proyek apa pun.

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

Untuk memulai pembuatan prototipe interaktif dengan emulator Authentication dan UI Emulator Suite, mulai Firebase Local Emulator Suite.

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 acara verifikasi, dan periksa apakah verifikasi berhasil.

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

Untuk menguji penyetelan ulang 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 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 titik akhir 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 otentikasi 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 khasnya adalah sebagai berikut.

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

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 kedua pendekatan.

Menguji alur IDP berbasis SDK Firebase

Jika aplikasi Anda menggunakan alur 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 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 dan kredensial tiruan pihak ketiga 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 proses 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 otentikasi 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.

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 level (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.

Pembatasan nilai / anti-penyalahgunaan

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

Apa selanjutnya?