Mencari cara membuat autentikasi pada Laravel dengan Sanctum? Anda berada di tempat yang tepat. Mengamankan API (Application Programming Interface) adalah langkah krusial dalam pengembangan aplikasi modern, baik itu untuk SPA (Single Page Application) atau aplikasi seluler.
Untungnya, Laravel Sanctum hadir sebagai solusi autentikasi yang ringan, cepat, dan sangat mudah diimplementasikan. Dalam panduan ini, kita akan membahas tuntas langkah demi langkah setup Sanctum untuk mengamankan REST API Anda dari awal hingga akhir.
Apa Sebenarnya Laravel Sanctum itu?
Sebelum kita masuk ke bagian teknis, mari kita pahami dulu. Laravel Sanctum adalah paket resmi Laravel yang menyediakan sistem autentikasi ringan. Fungsi utamanya ada dua:
- Autentikasi SPA: Memberikan autentikasi berbasis session yang mudah untuk frontend (seperti Vue atau React) yang berjalan di domain yang sama.
- Autentikasi Token API: Menerbitkan token API sederhana untuk user Anda, yang bisa digunakan untuk mengautentikasi permintaan dari aplikasi seluler atau dashboard pihak ketiga.
Dalam tutorial ini, kita akan fokus pada Autentikasi Token API.
Instalasi dan Konfigurasi Sanctum
Langkah pertama dalam cara membuat autentikasi pada Laravel dengan Sanctum adalah menginstal paketnya. Buka terminal Anda di dalam direktori proyek Laravel dan jalankan perintah-perintah berikut secara berurutan.
# 1. Instal paket Sanctum via Composer
composer require laravel/sanctum
# 2. Publikasikan file konfigurasi dan migrasi Sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
# 3. Jalankan migrasi database
php artisan migrate
Perintah vendor:publish
akan membuat file config/sanctum.php
, dan migrate
akan membuat tabel personal_access_tokens
di database Anda. Tabel inilah yang akan menyimpan semua token API yang dibuat oleh user.
Menyiapkan Model User untuk Token
Selanjutnya, kita perlu memberitahu Laravel bahwa model User
kita dapat menggunakan token. Ini adalah bagian penting dari autentikasi Laravel dengan Sanctum.
Buka model app/Models/User.php
dan tambahkan trait HasApiTokens
ke dalamnya.
namespace App\Models;
use Laravel\Sanctum\HasApiTokens; // <-- IMPORT BARIS INI
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable; // <-- TAMBAHKAN 'HasApiTokens' DI SINI
// ... sisa model Anda
}
Dengan trait ini, model User
Anda sekarang memiliki akses ke metode-metode baru seperti createToken()
dan tokens()
.
Membuat Rute untuk Membuat Token (Login)
Tentu saja, user perlu cara untuk mendapatkan token. Cara paling umum adalah melalui endpoint API untuk login
. Setelah user berhasil diautentikasi (misalnya, email dan password cocok), kita akan membuatkan token untuknya.
Anda bisa membuat AuthController
(php artisan make:controller Api/AuthController
) dan menambahkan logika ini:
// app/Http/Controllers/Api/AuthController.php
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $request->email)->first();
// Cek user dan password
if (! $user || ! Hash::check($request->password, $user->password)) {
return response()->json(['message' => 'Kredensial salah'], 401);
}
// Buat token jika login berhasil
$token = $user->createToken('auth-token')->plainTextToken;
return response()->json([
'message' => 'Login berhasil',
'access_token' => $token,
'token_type' => 'Bearer',
]);
}
}
Jangan lupa daftarkan route ini di routes/api.php
: Route::post('/login', [AuthController::class, 'login']);
Melindungi Rute API dengan Middleware Sanctum
Inilah inti dari cara membuat autentikasi pada Laravel dengan Sanctum: melindungi endpoint Anda.
Buka file routes/api.php
Anda. Untuk melindungi satu rute atau grup rute, Anda hanya perlu menambahkan middleware auth:sanctum
.
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
// Rute Publik (tidak perlu token)
Route::post('/login', [AuthController::class, 'login']);
// Rute Terproteksi (WAJIB pakai token)
Route::middleware('auth:sanctum')->group(function () {
// Contoh rute yang dilindungi
Route::get('/profil', function (Request $request) {
return $request->user(); // Mengembalikan data user yang sedang login
});
// Anda bisa tambahkan rute lain di sini
// Route::post('/produk', [ProdukController::class, 'store']);
});
Sekarang, setiap permintaan ke /api/profil
harus menyertakan header Authorization: Bearer <TOKEN_ANDA>
agar bisa diakses.
(Opsional) Mengelola dan Menghapus Token
Autentikasi Sanctum juga memberi Anda kendali penuh untuk mengelola token. Misalnya, Anda bisa membuat fitur logout yang menghapus token yang sedang digunakan.
Tambahkan metode ini di AuthController
Anda dan daftarkan route-nya di dalam grup middleware('auth:sanctum')
:
// app/Http/Controllers/Api/AuthController.php
public function logout(Request $request)
{
// Hapus token yang sedang digunakan untuk otentikasi
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Berhasil logout']);
}
Kesimpulan
Selesai! Hanya dengan beberapa langkah, Anda telah berhasil menerapkan cara membuat autentikasi pada Laravel dengan Sanctum. API Anda sekarang memiliki lapisan keamanan yang kuat, di mana user harus mengautentikasi diri untuk mendapatkan token sebelum mengakses data sensitif. Ini adalah fondasi keamanan yang solid dan modern untuk aplikasi Laravel Anda. Selamat ngoding!