Selamat datang di panduan lengkap Laravel Sanctum tutorial bahasa Indonesia! Di era digital ini, autentikasi API yang aman dan mudah diimplementasikan menjadi kebutuhan krusial bagi setiap pengembang web. Laravel Sanctum hadir sebagai solusi elegan untuk masalah ini, terutama bagi Anda yang menggunakan framework Laravel. Artikel ini akan membahas secara mendalam bagaimana menggunakan Laravel Sanctum untuk mengamankan aplikasi Anda, dengan bahasa yang mudah dipahami dan contoh kode yang relevan.
Apa Itu Laravel Sanctum dan Mengapa Anda Harus Menggunakannya?
Laravel Sanctum adalah paket autentikasi berbasis token ringan yang dirancang khusus untuk API dan aplikasi web single-page (SPA). Bayangkan Anda memiliki aplikasi web yang ingin diakses oleh aplikasi mobile atau pihak ketiga melalui API. Sanctum memungkinkan Anda memberikan token API kepada pengguna Anda, yang kemudian dapat digunakan untuk mengakses endpoint API yang dilindungi. Keunggulan utama Sanctum adalah kemudahan implementasi dan keamanannya. Dibandingkan dengan metode autentikasi API lainnya seperti OAuth2 yang kompleks, Sanctum menawarkan pendekatan yang lebih sederhana dan lebih cepat untuk diintegrasikan ke dalam proyek Laravel Anda. Selain itu, Sanctum juga mendukung autentikasi berbasis sesi untuk aplikasi web tradisional, sehingga Anda dapat menggunakan satu paket autentikasi untuk semua kebutuhan proyek Anda.
Persiapan Awal: Instalasi dan Konfigurasi Laravel Sanctum
Sebelum memulai tutorial Laravel Sanctum bahasa Indonesia ini, pastikan Anda telah memiliki proyek Laravel yang sudah berjalan. Jika belum, Anda dapat membuatnya dengan mudah menggunakan composer. Setelah proyek Laravel Anda siap, langkah pertama adalah menginstal paket Sanctum melalui Composer. Buka terminal Anda dan jalankan perintah berikut:
composer require laravel/sanctum
Setelah instalasi selesai, Anda perlu mem-publish file konfigurasi dan migrasi Sanctum. Jalankan perintah berikut:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
Perintah vendor:publish akan menyalin file konfigurasi sanctum.php ke direktori config Anda. Anda dapat menyesuaikan konfigurasi ini sesuai dengan kebutuhan Anda, misalnya mengubah masa berlaku token atau menyesuaikan tabel database yang digunakan. Perintah migrate akan membuat tabel personal_access_tokens di database Anda. Tabel ini akan digunakan untuk menyimpan token API yang akan diberikan kepada pengguna.
Membuat dan Mengelola Token API dengan Laravel Sanctum
Setelah konfigurasi selesai, langkah selanjutnya dalam tutorial Laravel Sanctum ini adalah membuat dan mengelola token API. Biasanya, Anda akan memberikan token API kepada pengguna setelah mereka berhasil login. Anda dapat melakukannya dengan menambahkan kolom api_token ke model User Anda. Namun, Sanctum menawarkan pendekatan yang lebih fleksibel dengan menggunakan tabel personal_access_tokens. Untuk membuat token API, Anda dapat menggunakan method createToken pada instance model User. Contoh:
use App\Models\User;
Route::post('/tokens/create', function (Request $request) {
$user = User::find(1); // Ganti dengan logika autentikasi Anda
$token = $user->createToken('my-app-token')->plainTextToken;
return ['token' => $token];
});
Kode di atas akan membuat token API baru untuk pengguna dengan ID 1 dan mengembalikannya dalam format JSON. Anda dapat menyimpan token ini di aplikasi mobile atau SPA Anda dan menggunakannya untuk mengakses endpoint API yang dilindungi. Perhatikan bahwa method createToken mengembalikan plainTextToken, yang merupakan token yang tidak di-hash. Anda hanya boleh melihat token ini sekali, jadi pastikan untuk menyimpannya dengan aman.
Untuk mencabut token API, pengguna dapat menggunakan method tokens()->delete() pada instance model User. Contoh:
Route::post('/tokens/revoke', function (Request $request) {
$user = $request->user(); // Dapatkan pengguna yang terotentikasi
$user->tokens()->delete();
return response()->json(['message' => 'Token revoked']);
});
Kode di atas akan mencabut semua token API yang dimiliki oleh pengguna yang terotentikasi.
Melindungi Endpoint API Anda dengan Middleware Sanctum
Setelah Anda memiliki token API, langkah selanjutnya adalah melindungi endpoint API Anda. Sanctum menyediakan middleware bernama auth:sanctum yang dapat Anda gunakan untuk memverifikasi token API yang dikirimkan dalam request. Untuk melindungi endpoint API, Anda dapat menerapkan middleware auth:sanctum ke route yang bersangkutan. Contoh:
Route::middleware('auth:sanctum')->get('/profile', function (Request $request) {
return $request->user();
});
Kode di atas akan melindungi route /profile dengan middleware auth:sanctum. Hanya pengguna yang memiliki token API yang valid yang dapat mengakses route ini. Middleware auth:sanctum akan mencari token API di header Authorization dengan format Bearer {token}. Jika token API valid, middleware akan mengautentikasi pengguna dan melampirkan instance model User ke request. Anda kemudian dapat mengakses instance model User melalui $request->user(). Jika token API tidak valid atau tidak ada, middleware akan mengembalikan response dengan status code 401 Unauthorized.
Autentikasi Berbasis Sesi dengan Laravel Sanctum: Alternatif untuk API Token
Selain autentikasi berbasis token, Laravel Sanctum juga mendukung autentikasi berbasis sesi untuk aplikasi web tradisional. Ini memungkinkan Anda menggunakan Sanctum sebagai satu-satunya paket autentikasi untuk semua kebutuhan proyek Anda. Untuk mengaktifkan autentikasi berbasis sesi, Anda perlu memastikan bahwa middleware EnsureFrontendRequestsAreStateful diterapkan ke middleware group web. Middleware ini akan memastikan bahwa request dari domain frontend Anda (misalnya, aplikasi web Anda) akan diperlakukan sebagai request stateful dan akan menggunakan sesi untuk autentikasi.
Anda dapat menemukan middleware EnsureFrontendRequestsAreStateful di file app/Http/Kernel.php. Pastikan middleware ini ada di dalam middleware group web:
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
// ...
],
// ...
];
Setelah middleware EnsureFrontendRequestsAreStateful diaktifkan, Anda dapat menggunakan method actingAs pada instance model User untuk mengautentikasi pengguna secara otomatis. Contoh:
use App\Models\User;
Route::get('/dashboard', function () {
$user = User::find(1); // Ganti dengan logika autentikasi Anda
Auth::login($user);
return view('dashboard');
});
Kode di atas akan mengautentikasi pengguna dengan ID 1 dan mengarahkannya ke view dashboard. Setelah pengguna terotentikasi, mereka dapat mengakses route yang dilindungi oleh middleware auth (bukan auth:sanctum).
Studi Kasus: Mengimplementasikan Laravel Sanctum pada Aplikasi E-commerce Sederhana
Untuk memberikan gambaran yang lebih jelas tentang bagaimana Laravel Sanctum dapat digunakan dalam proyek nyata, mari kita lihat studi kasus implementasi pada aplikasi e-commerce sederhana. Anggap saja aplikasi e-commerce kita memiliki dua jenis pengguna: pelanggan dan admin. Pelanggan dapat melihat produk, menambahkan produk ke keranjang, dan melakukan checkout. Admin dapat mengelola produk, kategori, dan pesanan. Kita ingin mengamankan endpoint API untuk mengelola produk dan pesanan agar hanya dapat diakses oleh admin. Berikut langkah-langkahnya:
- Membuat Middleware Custom untuk Memeriksa Role Pengguna: Kita akan membuat middleware custom untuk memeriksa apakah pengguna yang terotentikasi memiliki role