Cara Kerja Laravel Auth Guard


Di Laravel sudah ada fitur bawaan untuk otentikasi, konfigurasinya ada di file config/auth.php. Ada juga opsi scaffolding tampilan front-end nya, tapi di package terpisah yaitu laravel/ui. Yang mau dibahas sekarang adalah cara kerja otentikasi di Laravel, yang disebut dengan auth guard.

Kalau lihat di file konfig auth.php, ada dua opsi guard yang bisa dipilih: web dan api, dengan default guard yang dipilih adalah web. Apa bedanya? Sebelum bahas bedanya, saya coba jelasin konsepnya dengan analogi.

Bayangkan nih kita pergi ke sebuah gedung perkantoran. Di situ, setidaknya ada dua tipe pengunjung: tamu dan karyawan yang kantornya di gedung itu. Sebelum bisa masuk ke area lift & perkantorannya, biasanya ada gerbang yang harus ditap pake kartu pengenal. Nah, guard atau metode otentikasi di sini adalah name tag alias kartu tanda pengenal, bukan satpam. Sistem keamanan gedung bisa ngenalin, apakah yang mau lewat gerbang ini tamu atau karyawan di situ, dari kartu yang di-tap. Informasi si user melekat di kartu pengenalnya.

Nah, itu analogi guard di real life.

Di dalam guard itu minimal ada 2 komponen:

  1. driver: untuk tempat penyimpanan info user, dan
  2. provider: cara si guard untuk retrieve/ngambil info user

Driver

Untuk guard web, supir eh driver-nya adalah session. Artinya, informasi user akan ditaro di session. By default, driver yang didukung cuma ada session dan token. Di Laravel, untuk session ada konfigurasinya lagi secara terpisah, apakah disimpan di file/database/redis, lifetime, cookie’s name, dan lain-lain. Itu udah di luar skop si guard.

Untuk driver token itu dipakai sama guard api. Token apa? Biasanya bearer token yang dikirim di request header Authorization. Karena HTTP yang sifatnya stateless, untuk endpoint yang dipakai sebagai API umumnya tidak menyimpan info session/cookie. Jadi semua info yang dibutuhin ditaro di token yang selalu dikirim di request header. Token ibarat ‘kartu pengenal’ kalau pakai analogi sebelumnya.

(User) Provider

Komponen provider adalah cara si guard untuk menemukan informasi lengkap object user. By default hanya ada satu provider, yaitu users. Kita bisa define dua guard dengan driver yang berbeda (misal session dan token), tapi menggunakan user provider yang sama. Skop guard’s driver hanya di cara/tempat menyimpan info user. Sedangkan tanggung jawabnya user provider adalah mengambil info lengkap user berdasar potongan data user yang tersimpan di guard’s driver.

Di dalam provider itu sendiri, ada satu konfigurasi wajib yaitu driver (lagi-lagi driver). Provider’s driver yang didukung ada dua: eloquent dan database. Untuk driver eloquent, kita mesti define eloquent model yang merepresentasikan object user. Sedangkan driver database, kita harus define tabel mana di database yang menyimpan informasi user.

Custom Guard

Kita bisa bikin custom guard degan meng-extend contract class yang sudah diset sama Laravel. Misal kita mau konek ke satu sistem/server terpisah yang menyimpan informasi user, berarti harus bikin custom user provider. Atau mau handle cara menyimpan info usernya pakai token bikinan sendiri, bisa bikin class baru dan diregister sebagai guard. Yang penting paham cara kerjanya dulu supaya gak salah implementasi.

comments powered by Disqus