Tutorial Laravel 12 JWT #3 Konfigurasi Guard

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 374 kali

Rating: 5.00 ⭐

... 03 September 2025, 20:09

Setelah kita berhasil meng-install package JWT dan melakukan generate secret key, maka langkah berikutnya adalah memberi tahu Laravel bahwa untuk otentikasi API, kita tidak lagi memakai session bawaan, tetapi akan menggunakan JWT.

Secara default, Laravel menyediakan beberapa opsi guard, misalnya session untuk web dan token untuk API. Nah, sekarang tugas kita adalah mengubah guard api agar menggunakan driver jwt.

Silakan buka file config/auth.php, lalu ubah bagian guards menjadi seperti berikut:

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

Dengan konfigurasi ini, setiap request yang masuk ke guard api (misalnya route dengan middleware auth:api) akan dicek menggunakan token JWT, bukan lagi session tradisional.

Ibaratnya kita berkata kepada Laravel:

"Hei Laravel, mulai sekarang kalau ada request ke API, jangan lagi cek session. Fokus saja validasi token JWT yang dibawa request."


Modifikasi User Model

Setelah guard siap, langkah selanjutnya adalah menyesuaikan model User agar bisa berinteraksi dengan JWT.

Caranya: implementasikan interface JWTSubject dari package tymon/jwt-auth.

Silakan buka file app/Models/User.php, lalu tambahkan kode berikut:

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    /**
     * Ambil identifier unik user yang akan disimpan di dalam JWT.
     */
    public function getJWTIdentifier()
    {
        return $this->getKey(); // biasanya ID user
    }

    /**
     * Tambahkan klaim (claims) tambahan jika diperlukan.
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}

Mari kita pahami sedikit:

  • getJWTIdentifier() Method ini menentukan nilai unik yang akan disimpan di dalam token. Biasanya kita cukup gunakan id user.
  • getJWTCustomClaims() Di sini kita bisa menyisipkan data tambahan ke dalam token, misalnya role: admin atau is_premium: true. Untuk saat ini, kita biarkan kosong dulu.

Contoh Lengkap User Model

Setelah digabungkan dengan properti bawaan Laravel, model User kita akan terlihat seperti ini:

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements JWTSubject
{
    use HasFactory, Notifiable;

    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    // Implementasi JWT
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }

    /**
     * Casting atribut ke tipe data tertentu.
     */
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}

Pada materi berikutnya, kita akan membahas konfigurasi middleware supaya request yang masuk benar-benar diproteksi oleh JWT.

Daftar eBook