PROA

Professional Academy

React - Firebase Authentication

Agenda

Apa saja yang akan dibahas?

  • Intro
  • Authentication
  • Firebase - What Is?
  • Firebase - Authentication
  • Demo
  • QnA

Intro

Dari awal sampai dengan pembelajaran kita sebelumnya, kita fokusnya di dasar react dan konten saja bukan?

Nah, tapi, pada aplikasi yang umumnya dibuat, umumnya tidak seperti itu bukan?

Minimal pasti ada saja aplikasinya yang meminta kita untuk memasukkan "tanda pengenal" di dalam aplikasi yang digunakan

  • Entah tanda pengenal itu berupa identifikasi muka atau wajah atau tangan (a.k.a biometric)
  • Ataupun yang cukup sederhana seperti email dan password yang sudah ditentukan sebelumnya di dalam aplikasi

Nah proses seperti ini adalah sesuatu yang bernama otentikasi (Authentication)

Authentication

Suatu proses untuk menentukan si seseorang itu benar benar seseorang atau bukan.

Umumnya untuk membuat Authentication ini, kita membutuhkan suatu server untuk membuat BackEnd (bagian belakang dari suatu aplikasi)

Serta segala macam teknologi dan infrastruktur di balik layarnya (e.g. NodeJS dengan ExpressJS + Database PostgreSQL + Logic tentang keamanan yang cukup baik agar tidak mudah dijebol)

Namun, Apa daya kita sebagai seorang FrontEnd-er ?

Masa harus belajar BackEnd dulu baru bisa membuat aplikasi dengan Authentication ini?

Tenang, Firebase datang menyelamatkan kita !

Firebase - What Is?

Firebase, kalau diterjemahkan harafiah, Basis Api, kalau disingkat... jadinya FB?

Oh ! Berarti ini adalah produk sosial media bikinan Meta?

Tentu saja, bukan !

Mari kita coba untuk buka dokumentasi sebuah produk yang bernama Firebase di sini yah !

Firebase - What Is?

Jadi sudah tau Firebase itu apa?

Ya, ini adalah produk buatan Mbah Google, yang dikhususkan untuk mempercepat developer / perusahaan dalam membuat aplikasi, baik berbasis web ataupun berbasis mobile.

Firebase ini sebenarnya adalah kumpulan dari produk-produk yang dikhususkan untuk merancang aplikasi

Beberapa produk yang dimaksud adalah:

  1. Cloud Firestore - Menyimpan dan menyinkronkandata aplikasi pada skala global
  2. Crashlytics - Produk untuk melacak error sehingga bisa memperbaiki bug dengan lebih cepat
  3. Firebase Cloud Messaging (FCM) - Produk untuk mengirimkan notifikasi ke perangkat apa saja secara cepat
  4. Firebase Authentication - Produk untuk membuat Login dengan mudah, sederhana, dan GRATIS *

Nah pada pembelajaran ini yang akan kita gunakan adalah Firebase Authentication:

Firebase - Authentication

Mari kita coba untuk membuka dari halaman produknya di sini

Jadi setelah melihat halaman dokumentasinya ini, kita akan mengetahui beberapa hal tentang Firebase Authentication

  • Ini adalah produk layanan backend (umumnya dikenal dengan Backend as a Service - BaaS)
  • Produk ini disediakan dalam bentuk SDK yang mudah digunakan dan Library UI siap pakai untuk authentication pengguna dalam aplikasi yang dibuat
  • Mendukung Authentication berbasis email, nomor telpon, dan Penyedia Identitas Gabungan, seperti Google, Meta, Twitter, Github, dll (nama kerennya: Federated Identity & Social Sign In)

Pada pembelajaran ini kita akan mencoba untuk menggunakan:

Authentikasi berbasis email dan password dari Firebase Authentication SDK saja (tidak menggunakan Firebase Authentication UI)

Firebase - Authentication

DISCLAIMER: dalam aplikasi yang kita buat ini, kita juga akan menggunakan hooks tambahan yang didesain untuk mempermudah kita dalam menggunakan Firebase, yaitu react-firebase-hooks

Ini berisi kumpulan Hooks yang digunakan untuk memudahkan kita berbasis Firebase

Yang digunakan adalah sebuah hooks dengan nama useAuthState

Untuk dokumentasi dari react-firebase-hooks-nya dapat dibaca di sini yah

Dan untuk dokumentasi terhadap useAuthState dapat dibaca di sini yah

Demo - Part 1 (Initialize)

Sebelum kita memulai demo ini, kita harus melakukan inisialisasi dulu terhadap project Firebase yang akan digunakan

Langkah inisialisasi project Firebase adalah sebagai berikut

  1. Pastikan kita sudah memiliki sebuah akun Firebase yah (bisa menggunakan akun GMail)
  2. Pilih Create a project lalu buat nama dari Project yang akan dibuat (berbeda dari nama Apps)
  3. Pilih untuk Skip Analytics
  4. Pilih untuk menambahkan Web App yang dilambangkan dengan < / >
  5. Masukkan data yang dibutuhkan untuk aplikasi yang dibuat, dan di titik ini kita akan diberikan konfigurasi untuk Aplikasi yang akan digunakan, CATAT dan simpan baik baik
  6. Sampai di titik ini, sebelum kita mulai membuat aplikasi, kita harus memberikan ijin pada Firebase Authentication untuk bisa menggunakan Email sebagai sumber otentikasi (Native Providers - Email / Password - Enable)

Demo - Part 1 (Coding)

Yuk kita langsung demo menggunakan Firebase Authentication + React !

Untuk demo ini kita akan menggunakan referensi dari LogRocket dan dokumentasi Firebase Authentication-nya langsung yah !

Untuk langkah demonya adalah sebagai berikut:

  1. Clone repository awal dari template yang akan kita gunakan dari sini
  2. Menginstall firebase dan react-firebase-hooks dengan npm i firebase react-firebase-hooks
  3. Membuat file src/authentication/firebase.js
  4. Menambahkan logic untuk melakukan login dan register pada file src/authentication/firebase.js
  5. Memodifikasi file src/components/LoginOrRegisterForm.jsx untuk dapat melakukan login dan register
  6. Memodifikasi file src/components/NavBar.jsx untuk dapat melakukan signout
  7. Memodifikasi file App.js untuk menggunakan proteksi route berdasarkan kondisi user apakah sedang ada yang login atau tidak

Demo - Part 1 (Conclusion)

Seluruh kode yang dituliskan sebelumnya, dapat dilihat pada link berikut yah

Sampai di titik ini kita sudah berhasil untuk membuat seluruh logic yang kita inginkan dengan baik

Tapi ada sesuatu yang cukup mengganjal:

Apabila nanti ingin menambah Component / Page lagi, useEffect yang dibuat harus dituliskan ulang lagi yah?

Mubazir sekali yah !

Bagaimana cara untuk menanggulangi hal ini?

Maka solusinya adalah menggunakan suatu logic yang dinamakan Protected Routes

Demo - Part 2 (Intro)

Protected Routes adalah suatu cara yang memperbolehkan kita untuk memilih Component dari Rute mana yang harus kita lindungi dari suatu logic tertentu

Kebetulan, dalam React Router ini sendiri TIDAK disediakan suatu cara khusus untuk bisa menggunakan Protected Routes ini, sehingga kita harus membuatnya secara mandiri.

Jadi pada demo selanjutnya ini kita akan berusaha untuk membuat Protected Routes ini demi meringankan pekerjaan kita nantinya...

Demo - Part 2 (Coding)

Langkah pengerjaannya adalah sebagai berikut:

  1. Membuat sebuah file baru dengan nama src/components/ProtectedComponent.jsx (Component ini akan menjadi HOC + Logic untuk proteksi rute)
  2. Memodifikasi file ProtectedComponents.jsx untuk menambahkan logic proteksi rute dan untuk mengembalikan component children yang digunakan
  3. Memodifikasi file App.js untuk menghapuskan logic yang digunakan untuk proteksi rute
  4. Menambahkan ProtectedComponent dan penggunaannya pada index.js
  5. Sampai di tahap ini proteksi sudah selesai ! Selanjutnya kita cukup memodifikasi halaman HomePage.jsx untuk bisa menampilkan nama dari user dengan menggunakan.... useAuthState dan auth dari authentication/firebase.js lagi !

Seluruh kode yang dituliskan di atas, dapat dilihat di sini yah

QnA

Referensi

  • https://blog.logrocket.com/user-authentication-firebase-react-apps/
  • https://medium.com/firebase-developers/what-is-firebase-the-complete-story-abridged-bcc730c5f2c0
  • https://www.robinwieruch.de/react-router-private-routes/
withered-flowers (2022)