Sebagian besar aplikasi web tidak bisa memperlakukan semua pengunjung sama. Aplikasi blog pribadi mungkin cukup membedakan satu penulis dari sekumpulan pembaca, sedangkan aplikasi kasir perlu tahu persis pelanggan mana yang sedang membuat pesanan. Authentication adalah mekanisme yang menjawab pertanyaan “siapa Anda?” sebelum aplikasi memutuskan hal lain tentang pengguna tersebut. Tantangannya, protokol HTTP bersifat stateless: setiap request berdiri sendiri dan server tidak mengingat apa pun tentang request sebelumnya. Laravel menjembatani keduanya dengan sistem authentication berbasis session yang sudah aktif sejak menit pertama aplikasi dibuat.
Authentication Menjawab “Siapa Anda” #
Authentication adalah proses memverifikasi identitas pengguna berdasarkan kredensial — umumnya pasangan email dan password. Proses ini memiliki dua kemungkinan hasil saja: kredensial cocok dengan data user di database, atau tidak cocok. Perlu dicatat sejak awal, authentication tidak memutuskan apa yang boleh dilakukan user. Menentukan “boleh apa” adalah tugas authorization, yang akan kita pisahkan dengan sengaja di chapter berikutnya.
Dalam kode Laravel, status authentication diperiksa melalui facade Auth atau helper auth():
use Illuminate\Support\Facades\Auth;
Auth::check(); // true bila request berasal dari user yang sudah dikenali
Auth::user(); // instance model user, atau null
Auth::id(); // primary key user, atau null
Ketiga method ini akan muncul berulang kali sepanjang section, jadi kita perlu benar-benar akrab dengannya.
Alur Login Berbasis Session #
Karena HTTP tidak menyimpan ingatan, server membutuhkan cara untuk “mengingat” bahwa suatu browser sudah terbukti milik user tertentu. Solusi Laravel adalah session: data user disimpan di server (di database pada aplikasi kita), lalu browser diberi cookie berisi ID session sebagai kartu identitas yang dibawa pada setiap request. Alur lengkapnya tampak seperti ini:
Kita uraikan tiap tahapnya agar diagram ini tidak berdiri sendiri:
- Pengguna mengisi form login dan browser mengirim
POST /loginberisi email dan password. - Method
Auth::attemptmencocokkan kredensial dengan data user lewat provider. - Bila cocok, Laravel menyimpan ID user ke dalam session, lalu browser menyimpan cookie session.
- Setiap request berikutnya membawa cookie tersebut; Laravel membaca session dan memulihkan status login tanpa menanyakan password lagi.
- Logout menghapus data session sehingga cookie tidak lagi berarti apa-apa.
Seluruh rantai ini berjalan otomatis di balik layar — kita menulis Auth::attempt dan sisanya ditangani framework.
Guard dan Provider #
Dua istilah kunci dalam konfigurasi authentication Laravel adalah guard dan provider. Guard menentukan bagaimana sebuah request diautentikasi: guard web memakai driver session dan cocok untuk aplikasi yang diakses lewat browser. Sementara itu, provider menentukan dari mana data user diambil: driver eloquent membaca lewat model App\Models\User yang memetakan tabel users, sedangkan driver database melakukan query langsung ke tabel.
Perbandingan dua pendekatan guard yang paling umum:
| Guard | Driver | Cocok untuk | State login |
|---|---|---|---|
web | session | Aplikasi web klasik (browser) | Disimpan di server |
| Guard token | token / sanctum | API dan aplikasi mobile | Tidak ada (stateless) |
Guard berbasis token bekerja tanpa session: setiap request membawa token rahasia, dan server cukup mencocokkan token tersebut dengan user pemiliknya. Pendekatan stateless ini akan kita bedah ketika membahas Sanctum di section tersendiri. Untuk sebagian besar section ini, kita berkutat pada guard web.
Melihat Konfigurasi yang Aktif #
Kita bisa memastikan semua teori di atas dengan runner kecil yang me-boot aplikasi Laravel lalu membaca konfigurasi authentication:
use Illuminate\Support\Facades\Auth;
echo 'guard default : '.config('auth.defaults.guard')."\n";
echo 'guard aktif : '.Auth::getDefaultDriver()."\n";
echo 'check() : '.(Auth::check() ? 'true' : 'false')."\n";
echo 'user() : '.var_export(Auth::user(), true)."\n";
echo 'guards : '.implode(', ', array_keys(config('auth.guards')))."\n";
echo 'providers : '.implode(', ', array_keys(config('auth.providers')))."\n";Output yang Dihasilkan:
guard default : web
guard aktif : web
check() : false
user() : NULL
guards : web, sanctum
providers : usersBaris pertama menegaskan guard default aplikasi adalah web, dan Auth::getDefaultDriver() mengonfirmasi driver itulah yang aktif. check() bernilai false beserta user() bernilai NULL karena runner berjalan tanpa user yang login — kondisi yang sama dengan request pertama dari browser baru. Guard sanctum ikut terdaftar karena sandbox Course ini memasang package Laravel Sanctum. Detail lengkap struktur konfigurasi ini akan kita bedah di chapter Konfigurasi Authentication
.
Kita sekarang paham bagaimana Laravel mengenali pengguna: kredensial diperiksa sekali, lalu session yang mengambil alih pekerjaan mengingat. Namun sebelum melangkah lebih jauh, ada satu pembedaan konsep yang wajib rapi: apakah pengguna sudah dikenali, dan apa yang boleh dilakukan pengguna tersebut, adalah dua pertanyaan yang berbeda. Pembedaan itulah topik chapter Authentication vs Authorization . Rujukan resmi lengkapnya ada di dokumentasi Authentication Laravel.