Laravel 12 CRUD (MySQL + JWT) #11: Melindungi Rute CRUD dengan Middleware JWT

Laravel 12 CRUD (MySQL + JWT)
#11 Melindungi Rute CRUD dengan Middleware JWT

🔒 Pasang auth:api • Hanya token valid yang bisa akses data siswa
🔐 Sekarang kita buat endpoint CRUD siswa hanya bisa diakses oleh pengguna yang sudah login!
Di artikel sebelumnya, kita sudah membuat endpoint registrasi dan login yang mengembalikan token JWT. Saatnya melindungi rute CRUD siswa dengan middleware auth:api. Middleware ini akan memeriksa apakah request menyertakan token JWT yang valid. Jika tidak, pengguna akan mendapat error 401 Unauthorized. Yuk kita pasang! 🚀

Langkah 1: Apa Itu Middleware auth:api?

🔍 Middleware adalah lapisan yang memeriksa request sebelum sampai ke controller. auth:api adalah middleware bawaan Laravel yang menggunakan guard api untuk memverifikasi autentikasi. Karena kita sudah mengkonfigurasi guard api dengan driver jwt (di artikel #8), middleware ini akan memeriksa token JWT.

Jika token valid, request diteruskan ke controller. Jika tidak, Laravel akan mengembalikan respons 401 Unauthorized.

Langkah 2: Modifikasi Rute API untuk Melindungi CRUD Siswa

1 Buka file routes/api.php. Saat ini kita memiliki rute untuk autentikasi dan rute resource siswa yang belum dilindungi. Kita akan mengelompokkan rute siswa dalam grup middleware auth:api.

Ubah isi routes/api.php menjadi seperti ini:

<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\AuthController; use App\Http\Controllers\SiswaController; // Rute publik (tanpa autentikasi) Route::post('register', [AuthController::class, 'register']); Route::post('login', [AuthController::class, 'login']); // Rute yang membutuhkan autentikasi (token JWT) Route::middleware('auth:api')->group(function () { // Rute autentikasi Route::post('logout', [AuthController::class, 'logout']); Route::get('me', [AuthController::class, 'me']); Route::post('refresh', [AuthController::class, 'refresh']); // Rute CRUD siswa (dilindungi) Route::apiResource('siswa', SiswaController::class); });

Penjelasan:

  • middleware('auth:api') → semua rute di dalam grup ini akan melewati middleware auth dengan guard api.
  • Route::apiResource('siswa', SiswaController::class); → sekarang rute siswa hanya bisa diakses oleh pengguna yang sudah login dan memiliki token valid.
📌 Catatan: Urutan rute penting. Rute publik (register, login) harus berada di luar grup middleware, agar pengguna bisa mendaftar dan login tanpa token.

Langkah 3: Uji Coba – Akses Tanpa Token

2 Pastikan server Laravel berjalan (php artisan serve). Buka Postman, coba akses endpoint siswa tanpa menyertakan token:

  • Method: GET
  • URL: http://localhost:8000/api/siswa
  • Klik Send.

Respons yang diharapkan (status 401):

{ "message": "Unauthenticated." }

Berhasil! Endpoint siswa sekarang tidak bisa diakses tanpa token.

Langkah 4: Dapatkan Token JWT (Login)

3 Sebelum mengakses endpoint siswa, kita harus login terlebih dahulu untuk mendapatkan token. Gunakan Postman:

  • Method: POST
  • URL: http://localhost:8000/api/login
  • Body (raw JSON):
{ "email": "budi@example.com", "password": "password" }

Salin token dari respons. Token akan digunakan di header Authorization.

Langkah 5: Akses Endpoint Siswa dengan Token

4 Sekarang coba akses endpoint siswa dengan menyertakan token:

  • Method: GET
  • URL: http://localhost:8000/api/siswa
  • Tab Authorization → pilih Bearer Token → masukkan token yang didapat dari login.
  • Klik Send.

Respons sukses (status 200):

{ "success": true, "data": [ { "id": 1, "nama": "Budi Santoso", "kelas": "6A", "alamat": "Jl. Mawar No. 10", "created_at": "...", "updated_at": "..." } ] }

🎉 Berhasil! Sekarang endpoint CRUD siswa hanya bisa diakses oleh pengguna yang memiliki token valid.

Langkah 6: Uji Semua Endpoint CRUD dengan Token

5 Uji semua method CRUD dengan menyertakan token di header Authorization. Pastikan semuanya berjalan:

  • POST /api/siswa → tambah data (body JSON: nama, kelas, alamat)
  • GET /api/siswa/{id} → ambil detail
  • PUT /api/siswa/{id} → update data
  • DELETE /api/siswa/{id} → hapus data

Semua harus mengembalikan respons sukses (200, 201, dll) jika token valid.

🎯 Proteksi JWT berhasil dipasang! Sekarang API kita aman. Hanya pengguna yang sudah login dan memiliki token yang bisa mengelola data siswa. Selanjutnya kita bisa menambahkan fitur tambahan seperti relasi user–siswa (opsional).

Ringkasan Langkah

  • ✅ Buka routes/api.php.
  • ✅ Kelompokkan rute siswa dalam grup middleware('auth:api').
  • ✅ Uji akses tanpa token → harus 401 Unauthorized.
  • ✅ Login untuk mendapatkan token.
  • ✅ Akses endpoint siswa dengan menyertakan token di header Authorization.
  • ✅ Pastikan semua method CRUD berfungsi.

📌 Ingat: Middleware auth:api menggunakan guard api yang sudah kita konfigurasi dengan driver jwt. Jika ada error, pastikan konfigurasi di config/auth.php sudah benar.

(Link akan aktif saat artikel sebelumnya dan selanjutnya terbit)

📘 Laravel 12 CRUD (MySQL + JWT) • #11 Melindungi Rute CRUD dengan Middleware JWT • 🔒 API aman!
Lebih baru Lebih lama

نموذج الاتصال