Autentikasi: Login, Logout & Starter Kit

Starter kit Laravel 13 (Fortify), Auth::attempt, session, remember me, middleware auth/guest, dan hashing password.

Part 16 dari 26 ± 45 menit Gratis

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.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X