Sanctum tidak aktif hanya dengan berada di vendor/ — paket ini perlu migrasi tabelnya sendiri dan beberapa keputusan konfigurasi sebelum bisa mengeluarkan token. Kabar baiknya, seluruh prosesnya hanya tiga langkah: instal paket lewat Composer, publikasi migrasi ke folder aplikasi, lalu jalankan migrasi. Chapter ini menuntun ketiga langkah tersebut memakai output nyata dari sandbox, kemudian membedah config/sanctum.php dan trait HasApiTokens yang menjadi fondasi seluruh chapter berikutnya.
Menginstal Paket #
Instalasi dimulai dari Composer. Pada aplikasi baru yang belum punya routes/api.php, perintah php artisan install:api sekaligus membuat berkas route tersebut dan menginstal Sanctum otomatis; bila kita mengelola aplikasi yang sudah berjalan, composer require adalah jalur yang lebih terkontrol:
composer require laravel/sanctumDi sandbox course ini paket sudah terpasang, jadi kita verifikasi versinya lewat composer show laravel/sanctum:
name : laravel/sanctum
descrip. : Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.
versions : * v4.3.3
requires : ext-json *
illuminate/console ^11.0|^12.0|^13.0
php ^8.2Sanctum hanya mendukung PHP 8.2 ke atas dan framework Illuminate 11–13 — dependensinya minim, konsisten dengan klaim featherweight di chapter Pengenalan Sanctum .
Mempublikasi Migrasi dan Konfigurasi #
Tabel personal_access_tokens tidak dibuat otomatis oleh service provider; kita perlu memindahkan migrasinya dari paket ke aplikasi agar ikut terkelola bersama migrasi kita sendiri. Dua tag publikasi tersedia untuk itu:
php artisan vendor:publish --tag=sanctum-migrationsOutput yang Dihasilkan:
INFO Publishing [sanctum-migrations] assets.
Copying directory [vendor/laravel/sanctum/database/migrations] to [database/migrations] DONEphp artisan vendor:publish --tag=sanctum-configOutput yang Dihasilkan:
INFO Publishing [sanctum-config] assets.
File [config/sanctum.php] already exists ........................... SKIPPEDStatus SKIPPED di atas muncul karena sandbox sudah pernah mempublikasi konfigurasi; pada aplikasi yang benar-benar baru, berkas config/sanctum.php akan tersalin dengan status DONE.
Menjalankan Migrasi #
Setelah berkas migrasi berada di tangan aplikasi, migrate membuat tabelnya:
php artisan migrate:freshOutput yang Dihasilkan:
Creating migration table ....................................... 2.42ms DONE
INFO Running migrations.
0001_01_01_000000_create_users_table ........................... 1.70ms DONE
0001_01_01_000001_create_cache_table ........................... 0.85ms DONE
0001_01_01_000002_create_jobs_table ............................ 1.48ms DONE
2026_10_13_153049_create_personal_access_tokens_table .......... 0.78ms DONE
2026_10_13_194750_create_posts_table ........................... 2.85ms DONEBaris terakhir, create_posts_table, bukan bagian Sanctum — itu migrasi latihan yang kita siapkan di sandbox (tabel posts dengan kolom user_id, title, body) agar contoh token abilities di chapter Token Abilities
punya data yang realistis untuk dilindungi. Skema tabel Sanctum sendiri layak dihafal karena seluruh fiturnya berputar di sekitarnya:
| Kolom | Isi dan fungsi |
| | |
| name | Label token untuk manusia, misalnya mobile-budi |
| token | Hash SHA-256 dari plaintext — nilai asli tidak pernah disimpan |
| abilities | JSON daftar hak akses, misalnya ["posts:create"] |
| last_used_at | Waktu terakhir token dipakai, diperbarui tiap request |
| expires_at | Masa berlaku opsional per token |
Bedah config/sanctum.php #
Konfigurasi yang dipublikasi berisi enam bagian penting. Pertama, stateful menampung daftar domain frontend yang berhak memakai mode cookie — topik penuh di chapter Authenticating SPA
. Kedua, guard bernilai ['web']: saat request tidak membawa bearer token, Sanctum mencoba mengautentikasi lewat guard session web terlebih dahulu, dan barulah beralih ke pencarian token. Urutan inilah yang membuat satu aplikasi bisa melayani halaman web bermode session dan API bermode token secara bersamaan tanpa guard tambahan.
Ketiga, 'expiration' => null berarti token tidak pernah kedaluwarsa secara global; mengisi angka menit di sini memberlakukan umur maksimum semua token sekaligus — konsekuensi pencabutannya kita uji di chapter Revoking Tokens
. Keempat, token_prefix menambahkan awalan tertentu pada plaintext token agar alat pemindai kebocoran (misalnya GitHub secret scanning) bisa mengenalinya. Kelima, middleware memetakan kelas middleware yang dipakai mode SPA — penggantian di sini hanya perlu bila kita mengkustomisasi pipeline cookie. Keenam, prefix mengatur awalan path route internal Sanctum (sanctum secara bawaan) sehingga endpoint CSRF cookie menjadi /sanctum/csrf-cookie; mengubahnya berguna bila path itu bertabrakan dengan route milik aplikasi kita sendiri.
Trait HasApiTokens #
Satu langkah terakhir: model User harus memakai trait HasApiTokens supaya kolom-kolom di tabel di atas bisa diakses dari sisi model:
<?php
// app/Models/User.php (cuplikan)
use Laravel\Sanctum\HasApiTokens;
#[Fillable(['name', 'email', 'password'])]
#[Hidden(['password', 'remember_token'])]
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}Trait ini menyuntikkan empat kemampuan ke model: createToken() untuk mengeluarkan token, relasi tokens untuk daftar token milik user, tokenCan() untuk memeriksa abilities, dan currentAccessToken() untuk membaca token yang sedang mengautentikasi request. Keempatnya akan kita pakai satu per satu di chapter-chapter selanjutnya.
Satu catatan penutup tentang urutan kerja: install:api dan jalur manual di atas berujung pada hasil akhir yang sama, jadi pilihannya urusan selera tim. Yang layak dicatat di dokumentasi proyek adalah tiga artefak hasil instalasi — paket di composer.json, migrasi personal_access_tokens, dan trait di model User — supaya rekan satu tim bisa melacak dari mana autentikasi API ini berasal. Fondasi sudah berdiri — saatnya mencetak token pertama kita di chapter Personal Access Tokens
. Dokumentasi resmi instalasi tersedia di halaman Sanctum
.