Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

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 iOS, Android, dan Firebase SDK web, 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 nyata adalah proyek yang Anda konfigurasikan dan aktifkan di konsol Firebase; proyek nyata memiliki sumber daya langsung, seperti database, keranjang penyimpanan, fungsi, atau sumber daya lain yang Anda siapkan untuk proyek itu. Saat bekerja dengan proyek nyata, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung dalam proyek Anda.

Untuk produk apa pun yang tidak Anda tiru, aplikasi dan kode Anda akan berinteraksi dengan database langsung , keranjang penyimpanan, fungsi, dll.
Demo Proyek demo tidak memiliki konfigurasi konsol Firebase dan tidak ada sumber daya langsung.

Demo ID proyek memiliki demo- awalan.
Saat bekerja dengan proyek demo, aplikasi dan kode Anda hanya berinteraksi dengan emulator. Jika aplikasi Anda berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode tersebut akan gagal.

Kami menyarankan Anda menggunakan proyek demo jika memungkinkan. 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);
iOS - Swift
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web v8

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

Web v9

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

const auth = getAuth();
useAuthEmulator(auth, "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 variabel lingkungan set, Firebase Admin SDK akan menerima unsigned ID Token dan sesi cookie yang dikeluarkan oleh emulator Authentication (melalui verifyIdToken dan createSessionCookie metode masing-masing) untuk memfasilitasi developmemt lokal dan pengujian. 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 firebase emulators:start 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.

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 untuk menggunakan signInWithCredential (misalnya di cabang kode) dan menggunakan alur autentikasi token dengan token ID tiruan untuk akun alih-alih 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 new firebase.auth.OAuthProvider('yahoo.com') .

Apa selanjutnya?