Tutorial Laravel 12 JWT #6 Konfigurasi Route

Belajar autentikasi JWT (JSON Web Token) di Laravel 12 untuk membangun REST API yang aman dan scalable. Mulai dari konsep dasar JWT, install & konfigurasi paket, pembuatan endpoint login/register, proteksi route dengan middleware, refresh & revoke token, hingga best practice keamanan (token expiry, blacklist, rate limiting). Cocok untuk pemula yang ingin membuat backend API modern dengan Laravel.

✅ Telah dilihat 293 kali

Rating: 5.00 ⭐

... 03 September 2025, 20:09

Konfigurasi Rute API

Setelah kita selesai membuat controller untuk autentikasi berbasis JWT, mari kita ingat lagi secara singkat apa fungsi masing-masing endpoint:

  • register → digunakan untuk mendaftarkan user baru. Begitu user berhasil dibuat, sistem langsung memberikan token JWT sehingga user bisa langsung login tanpa harus masuk manual.
  • login → bertugas menukar kombinasi email dan password menjadi token JWT, yang nanti akan dipakai untuk mengakses endpoint yang membutuhkan autentikasi.
  • logout → ketika user ingin keluar, token yang sedang dipakai akan dibuat tidak valid lagi, sehingga tidak bisa digunakan untuk akses lebih lanjut.
  • refresh → berguna untuk memperpanjang masa berlaku token tanpa harus login ulang. Ini penting supaya user tetap nyaman tanpa sering login.
  • me → mengambil data user berdasarkan token yang dikirim, biasanya untuk menampilkan profil user yang sedang aktif.
  • respondWithToken → fungsi ini sebenarnya membantu kita merapikan format respons token, jadi struktur JSON-nya konsisten setiap kali token dikembalikan.

Nah, sekarang setelah kita paham fungsinya, kita perlu menghubungkan semua fungsi ini dengan rute API. Untuk itu, silakan buka file api.php di folder routes dan ubah menjadi seperti ini:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\ProductController;

Route::prefix('auth')->name('auth.')->group(function () {
    Route::post('register', [AuthController::class, 'register'])->name('register');
    Route::post('login', [AuthController::class, 'login'])->name('login');

    Route::middleware('jwt')->group(function () {
        Route::post('logout', [AuthController::class, 'logout'])->name('logout');
        Route::get('me', [AuthController::class, 'me'])->name('me');
        Route::post('refresh', [AuthController::class, 'refresh'])->name('refresh');
    });
});

Route::middleware('jwt')->group(function () {
    Route::apiResource('products', ProductController::class);
});

Import dan persiapan

Di bagian atas, kita mengimpor beberapa hal penting:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\ProductController;
  • Route → untuk mendefinisikan rute di Laravel.
  • AuthController → controller yang menangani semua fungsi autentikasi berbasis JWT.
  • ProductController → controller yang menangani operasi CRUD untuk produk.

2. Group rute auth

Selanjutnya kita membuat group route dengan prefix auth dan nama prefix auth.:

Route::prefix('auth')->name('auth.')->group(function () {
    Route::post('register', [AuthController::class, 'register'])->name('register');
    Route::post('login', [AuthController::class, 'login'])->name('login');

Penjelasannya:

  • prefix('auth') → semua route di dalam group ini otomatis diawali /auth. Misalnya /auth/register.
  • name('auth.') → memberi prefix nama untuk rute, sehingga rute register akan punya nama lengkap auth.register.
  • register dan login → dua endpoint ini tidak membutuhkan autentikasi, karena user baru bisa mendaftar atau login tanpa token.

3. Rute yang membutuhkan token JWT

Masih di dalam group auth, ada subgroup yang dilindungi middleware jwt:

    Route::middleware('jwt')->group(function () {
        Route::post('logout', [AuthController::class, 'logout'])->name('logout');
        Route::get('me', [AuthController::class, 'me'])->name('me');
        Route::post('refresh', [AuthController::class, 'refresh'])->name('refresh');
    });
});

Artinya:

  • Middleware jwt akan memeriksa token JWT di setiap request. Jika token tidak valid atau tidak ada, request akan ditolak.
  • Endpoint di sini hanya bisa diakses oleh user yang sudah login.
  • logout → mematikan token saat user ingin keluar.
  • me → mengambil informasi user dari token.
  • refresh → memperpanjang masa berlaku token tanpa login ulang.

Ini memberi kita pemisahan yang jelas: route public (registerlogin) dan route protected (logoutmerefresh).


4. Rute untuk produk (CRUD)

Di luar group auth, kita mendefinisikan resource route untuk produk:

Route::middleware('jwt')->group(function () {
    Route::apiResource('products', ProductController::class);
});

Artinya:

  • Semua operasi CRUD produk hanya bisa diakses oleh user yang sudah login.
  • apiResource otomatis membuat rute seperti:
    • GET /products → index (list semua produk)
    • POST /products → store (buat produk baru)
    • GET /products/{id} → show (lihat detail produk)
    • PUT/PATCH /products/{id} → update (ubah produk)
    • DELETE /products/{id} → destroy (hapus produk)

Dengan middleware('jwt'), semua rute produk dilindungi token JWT, jadi hanya user yang autentik dan memilii token yang masuh berlaku yang bisa mengaksesnya. Pada materi berikutnya, kita akan mencoba beberapa endpint yang sudah kita buat diatas menggunakan aplikasi Postman.

Daftar eBook