- Part 1: Setup & Menampilkan Data
- Part 2: CRUD (Tambah, Edit, Hapus)
- Part 3: Pencarian, Filter & Pagination
- Part 4: Login & Autentikasi (sedang dibaca)
Selamat datang di bagian terakhir seri Laravel To-Do List. Dari Part 1 hingga Part 3, kita membangun aplikasi tugas lengkap dengan CRUD, pencarian, dan pagination. Namun ada celah keamanan: siapa pun bisa mengelola tugas. Di Part 4 ini kita bangun autentikasi login memakai sistem Auth bawaan Laravel yang sangat matang.

Bagaimana Autentikasi Bekerja
Alurnya: pengguna mengisi form login, Laravel memverifikasi kredensial dengan Auth::attempt(), jika cocok Laravel otomatis membuat session login, lalu middleware auth menjaga halaman agar hanya bisa diakses setelah login. Kabar baiknya, Laravel sudah menyediakan tabel users dan seluruh mesin autentikasi — kita tinggal merangkainya.
Menyiapkan Tabel dan User
Laravel sudah membuat migration tabel users secara bawaan (dijalankan saat php artisan migrate di Part 1). Kita cukup menambahkan satu akun. Cara termudah lewat Tinker:
php artisan tinker
Lalu di dalam Tinker, jalankan:
use App\Models\User;
use Illuminate\Support\Facades\Hash;
User::create([
'name' => 'Administrator',
'email' => 'admin@todolist.test',
'password' => Hash::make('rahasia123'),
]);
Fungsi Hash::make() mengenkripsi password dengan bcrypt — Laravel tidak pernah menyimpan password dalam bentuk teks biasa.
Membuat Controller Auth
Buat controller untuk menangani login dan logout:
php artisan make:controller AuthController
Isi dengan tiga metode:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function formLogin()
{
return view('auth.login');
}
public function login(Request $request)
{
$kredensial = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($kredensial)) {
$request->session()->regenerate();
return redirect()->route('tugas.index');
}
return back()->withErrors([
'email' => 'Email atau password salah.',
])->onlyInput('email');
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('login');
}
}
Inti prosesnya ada di Auth::attempt($kredensial) — Laravel otomatis mencari user berdasarkan email dan mencocokkan password ter-hash. Jika berhasil, ia membuat session login. Method session()->regenerate() mencegah serangan session fixation.
Membuat Form Login
Buat view resources/views/auth/login.blade.php:
@extends('layouts.app')
@section('konten')
<h2>Login</h2>
@if ($errors->any())
<div class="kotak-error">{{ $errors->first() }}</div>
@endif
<form action="{{ route('login.proses') }}" method="post">
@csrf
<label>Email</label>
<input type="email" name="email" value="{{ old('email') }}">
<label>Password</label>
<input type="password" name="password">
<button type="submit" class="tombol">Login</button>
</form>
@endsection

Menyiapkan Route Auth
Tambahkan route login dan logout, lalu lindungi route tugas dengan middleware auth di routes/web.php:
use App\Http\Controllers\AuthController;
Route::get('/login', [AuthController::class, 'formLogin'])->name('login');
Route::post('/login', [AuthController::class, 'login'])->name('login.proses');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
Route::resource('tugas', TugasController::class)->middleware('auth');
Dengan ->middleware('auth'), seluruh route tugas kini hanya bisa diakses setelah login. Pengguna yang belum login otomatis dialihkan ke halaman login — Laravel yang mengurus semuanya.

Menampilkan Nama User dan Tombol Logout
Perbarui layout layouts/app.blade.php untuk menampilkan status login. Manfaatkan helper auth():
<nav>
<a href="{{ route('tugas.index') }}">Daftar Tugas</a>
@auth
<span>Halo, {{ auth()->user()->name }}</span>
<form action="{{ route('logout') }}" method="post" style="display:inline">
@csrf
<button type="submit">Logout</button>
</form>
@endauth
</nav>
Directive @auth hanya menampilkan isinya bila pengguna sudah login — cara Blade yang bersih untuk mengecek status autentikasi.
Menguji Alur Login
- Buka
/tugastanpa login → dialihkan ke/login. - Masuk dengan email
admin@todolist.testdan passwordrahasia123→ berhasil. - Coba password salah → muncul pesan “Email atau password salah.”
- Klik Logout → session dihapus, kembali ke login.
Catatan: Laravel Breeze
Untuk proyek nyata, Laravel menyediakan Breeze — paket resmi yang menghasilkan seluruh fitur autentikasi (register, login, reset password, verifikasi email) secara instan dengan composer require laravel/breeze lalu php artisan breeze:install. Memahami autentikasi manual seperti di artikel ini membuat Anda lebih paham apa yang terjadi “di balik layar” Breeze.
Penutup Seri
Selamat! Anda telah menyelesaikan seri lengkap membangun aplikasi To-Do List dengan Laravel — dari setup dan menampilkan data (Part 1), CRUD (Part 2), pencarian dan pagination (Part 3), hingga autentikasi login (Part 4). Anda kini menguasai fondasi pengembangan aplikasi web modern dengan Laravel.
Langkah selanjutnya bisa Anda eksplorasi: relasi antar-tabel (tugas milik user tertentu), peran/hak akses, notifikasi, hingga REST API. Semua dibangun di atas konsep yang sudah Anda kuasai. Selamat berkarya!
Referensi: untuk pendalaman lebih lanjut, kunjungi dokumentasi resmi Laravel.

