Autentikasi: Login, Logout & Starter Kit
Starter kit Laravel 13 (Fortify), Auth::attempt, session, remember me, middleware auth/guest, dan hashing password.
Autentikasi = membuktikan identitas
Laravel punya sistem autentikasi lengkap. Dua konsep inti: guard (cara mengenali pengguna di tiap request — mis. session untuk web, token untuk API) dan provider (dari mana data pengguna diambil — biasanya model User via Eloquent).
Cara tercepat: starter kit
Saat laravel new, pilih starter kit — Laravel 13 menyediakan React, Svelte, Vue, dan Livewire. Semuanya memakai Laravel Fortify di belakang layar dan sudah lengkap: login, registrasi, lupa/atur ulang password, verifikasi email, konfirmasi password, autentikasi dua faktor (2FA), dan pembatasan percobaan login. Ada juga varian WorkOS AuthKit (login sosial, passkey, SSO) dan opsi Teams. Seluruh kode ada di proyekmu sehingga bebas dimodifikasi.
laravel new toko-saya # pilih starter kit
php artisan route:list # lihat route login, register, dll.
Walau memakai starter kit, penting memahami mekanisme dasarnya — itulah isi bab ini.
Login manual dengan Auth::attempt
use Illuminate\Support\Facades\Auth;
public function authenticate(Request $request): RedirectResponse
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
if (Auth::attempt($credentials, $request->boolean('ingat'))) { // argumen ke-2: "remember me"
$request->session()->regenerate(); // cegah session fixation
return redirect()->intended('/dashboard'); // kembali ke halaman yang dituju semula
}
return back()
->withErrors(['email' => 'Email atau password salah.'])
->onlyInput('email');
}
Auth::attempt()mencari pengguna berdasarkan email, membandingkan password dengan hash-nya, dan bila cocok menyimpan login di session. Kembalian:true/false.- Selalu panggil
$request->session()->regenerate()setelah login berhasil. - Pesan error yang umum ("email atau password salah") agar tidak membocorkan email mana yang terdaftar.
Logout
public function logout(Request $request): RedirectResponse
{
Auth::logout();
$request->session()->invalidate(); // hapus data session
$request->session()->regenerateToken(); // token CSRF baru
return redirect('/');
}
Mengakses pengguna yang login
Auth::user(); // model User atau null
Auth::id(); // id atau null
auth()->check(); // sudah login?
$request->user(); // di controller
@auth ... @endauth // di Blade
@guest ... @endguest
Melindungi route
Route::middleware('auth')->group(function () { /* hanya yang login */ });
Route::middleware('guest')->group(function () { /* hanya tamu: halaman login */ });
Route::middleware(['auth', 'verified'])->get('/dashboard', ...); // email terverifikasi
Pengguna yang belum login akan diarahkan ke halaman login; redirect()->intended() mengembalikannya ke tujuan awal sesudah login.
Password: selalu di-hash
use Illuminate\Support\Facades\Hash;
Hash::make('rahasia123'); // bcrypt/argon (otomatis, dengan salt)
Hash::check('rahasia123', $user->password); // true / false
// di model User: 'password' => 'hashed' pada casts() → otomatis di-hash saat diisi
API & SPA
Untuk API token dan SPA gunakan Laravel Sanctum (dibahas di bab API). Untuk OAuth2 penuh: Laravel Passport. Untuk login sosial: Socialite.
Keamanan login
- Batasi percobaan login (rate limiting) — starter kit sudah memasangnya (
RateLimiter::for('login', ...)). - Aktifkan 2FA untuk akun penting.
- Jangan menyimpan password asli atau mengirimnya lewat log.