Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Hubungkan aplikasi Anda ke Emulator Otentikasi

Sebelum menggunakan emulator Otentikasi dengan Anda aplikasi, pastikan bahwa Anda memahami keseluruhan Firebase lokal Emulator Suite alur kerja , dan bahwa Anda menginstal dan mengkonfigurasi Lokal Emulator Suite dan meninjau nya perintah CLI .

Apa yang dapat saya lakukan dengan emulator Otentikasi?

Authentication emulator menyediakan high-fidelity emulasi lokal layanan Firebase Authentication, menyediakan banyak fungsi yang ditemukan di produksi Firebase Authentication . 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 untuk digunakan, sebelum Anda memulai emulator, dalam CLI jangka firebase use di direktori kerja Anda. Atau, Anda dapat melewati --project bendera untuk setiap perintah emulator.

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

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 setiap produk yang Anda tidak meniru, aplikasi dan kode akan berinteraksi dengan sumber daya hidup (contoh database, penyimpanan ember, fungsi, dll).

Demo

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

Proyek ID untuk proyek-proyek demo memiliki demo- awalan.

Ketika bekerja dengan demo proyek Firebase, aplikasi dan kode berinteraksi dengan emulator saja. Jika aplikasi Anda mencoba berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode itu 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 Authentication sebagai berikut.

Android
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS - Swift
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

The Firebase Admin SDK secara otomatis terhubung ke emulator Authentication ketika FIREBASE_AUTH_EMULATOR_HOST variabel lingkungan diatur.

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. Pastikan untuk tidak mengatur variabel lingkungan dalam produksi.

Saat menghubungkan ke emulator Otentikasi, Anda harus menentukan ID proyek. Anda dapat melewati ID proyek untuk initializeApp langsung atau mengatur GCLOUD_PROJECT variabel lingkungan. 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, Authentication emulator masalah ID token unsigned, yang hanya diterima oleh emulator Firebase lain, atau Firebase Admin SDK ketika 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 otentikasi anonim, aplikasi Anda dapat berolahraga masuk logika untuk platform Anda ( iOS , Android , web ).

Untuk otentikasi email / password, Anda dapat mulai prototyping dengan menambahkan account pengguna untuk emulator Authentication dari aplikasi Anda menggunakan metode otentikasi SDK, atau dengan menggunakan Emulator Suite UI.

  1. Dalam Emulator Suite UI, klik tab Authentication.
  2. Klik tombol Add pengguna.
  3. Ikuti wizard pembuatan akun pengguna, isi bidang otentikasi email.

Dengan pengguna tes dibuat, aplikasi Anda dapat menandatangani pengguna dan keluar dengan SDK logika untuk platform Anda ( iOS , Android , web ).

Untuk pengujian verifikasi email / masuk dengan link email mengalir, emulator mencetak URL ke terminal di mana 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 password, emulator mencetak URL yang sama, termasuk parameter newPassword (yang Anda dapat berubah 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 Authentication endpoint pendaftaran ISTIRAHAT .
  2. Masuk pengguna menggunakan email dan sandi untuk melakukan tes.
  3. Jika berlaku untuk tes Anda, mengambil tersedia out-of-band kode verifikasi email dari SISA endpont emulator khusus .
  4. Catatan pengguna siram dengan ISTIRAHAT endpoint emulator khusus untuk data kliring.

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 sama 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, aliran otentikasi telepon / SMS identik dengan yang dijelaskan untuk produksi ( iOS , Android , web ).

Menggunakan UI Emulator Suite:

  1. Dalam Emulator Suite UI, klik tab Authentication.
  2. Klik tombol Add 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! Sebaliknya, emulator print kode yang akan dikirim melalui SMS ke terminal yang sama di mana Anda berlari 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. Platform panggilan signInWithPhoneNumber untuk memulai proses verifikasi.
  2. Mengambil kode verifikasi menggunakan emulator khusus SISA endpoint .
  3. Panggilan 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 arus otentikasi, dokumentasi untuk berbagai kombinasi penyedia dan platform yang dapat digunakan dalam aplikasi Anda .

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 setiap Firebase SDK aliran end-to-end, seperti OAuthProvider untuk masuk dengan Microsoft, GitHub, atau Yahoo, untuk pengujian interaktif, emulator Authentication menyajikan versi lokal yang sesuai laman masuk ke bantuan Anda uji otentikasi dari web apps bahwa panggilan signinWithPopup atau signInWithRedirect metode. 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 "manual" masuk teknik dan platform panggilan Anda signInWithCredentials metode, kemudian, seperti biasa, aplikasi akan meminta nyata masuk pihak ketiga dan mengambil mandat pihak ketiga yang nyata.

Perhatikan bahwa emulator hanya mendukung signInWithCredential otentikasi untuk kredensial diambil dari Google Sign-In, Apple, dan penyedia lain yang menggunakan ID token diimplementasikan sebagai JSON Web Tokens (JWTs). 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 code) dan menggunakan aliran otentikasi tanda dengan token ID mock piutang bukannya kredensial yang 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, menggunakan JSON string literal di tempat 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}'
));

Ketika digunakan dengan emulator, kode ini berhasil akan mengotentikasi 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 mengejek.

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. Authentication emulator tidak mengirim email atau pesan SMS, tapi seperti yang dijelaskan di atas , itu menghasilkan masuk kode dan output mereka 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?

  • Untuk satu set curated video dan rinci bagaimana-untuk contoh, mengikuti Firebase Emulator Pelatihan Playlist .

  • Karena fungsi memicu adalah integrasi khas dengan Authentication, mempelajari lebih lanjut tentang Fungsi Cloud untuk Firebase emulator di fungsi Run lokal .