Cara Mengamankan Rest API Laravel Menggunakan Sanctum untuk Aplikasi Mobile
Bikin aplikasi mobile yang UI/UX-nya aesthetic itu emang penting, tapi kalau backend-nya nggak aman, itu literally red flag terbesar buat developer. Bayangin aja, lo udah capek-capek bikin API di Laravel, tapi gampang banget dibobol orang karena sistem auth-nya berantakan. Ngeri, kan?
Kalau lo lagi bikin REST API untuk aplikasi mobile (entah itu pake Flutter, React Native, atau Kotlin) dan ngerasa Laravel Passport itu terlalu overkill atau JWT terlalu ribet di-setup, kenalan dulu sama Laravel Sanctum.
Sanctum ini ibarat bestie buat API lo. Dia ringan, gampang di- setup, dan sat-set banget buat ngeluarin API Token. Yuk, langsung kita spill cara pasangnya!
Kenapa Harus Laravel Sanctum?
Jujurly, banyak yang masih bingung bedanya Sanctum sama Passport. Intinya gini:
Passport: Cocok kalau lo bikin sistem OAuth2 yang massive banget (kayak sistem "Login with Google/Facebook").
Sanctum: Didesain khusus buat SPA (Single Page Applications) dan aplikasi mobile sederhana yang cuma butuh sistem token-based authentication. Sangat effortless dan anti-ribet!
Step-by-Step Pasang Sanctum di Laravel
Nggak perlu overthinking, ikutin aja step ini pelan-pelan. Pastiin project Laravel lo udah jalan dengan baik, ya.
1. Install Library-nya
Buka terminal lo, masuk ke folder project, terus ketik perintah sakti ini buat narik package Sanctum via Composer:
composer require laravel/sanctum
Kalau udah kelar, kita publish file konfigurasinya dan jalankan migrasi database buat bikin tabel personal_access_tokens tempat nyimpen token-token si user.
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
2. Update Model User
Biar user lo punya kekuatan buat generate token, lo harus nambahin sifat (Trait) HasApiTokens di file model User lo.
Buka file app/Models/User.php, terus pastiin kode lo kurang lebih kayak gini:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; // <-- Tambahin ini
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable; // <-- Jangan lupa panggil di sini
// ... sisa kode lo
}
3. Bikin Fitur Login Buat Dapetin Token
Sekarang, kita bikin logika login-nya. Kalau user masukin email dan password yang bener, kita bakal ngasih mereka "kunci masuk" alias Token.
Bikin AuthController atau langsung taruh di controller yang udah lo siapin:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
public function login(Request $request)
{
// 1. Validasi inputan
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
// 2. Cari user-nya ada nggak di database
$user = User::where('email', $request->email)->first();
// 3. Cek password-nya bener nggak
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json([
'message' => 'Email atau Password salah, cuy!'
], 401);
}
// 4. Generate Token dari Sanctum
$token = $user->createToken('Mobile-App-Token')->plainTextToken;
// 5. Kirim token ke frontend/mobile app
return response()->json([
'message' => 'Login sukses!',
'token' => $token,
'user' => $user
], 200);
}
Note: Token yang di-return itu wajib banget disimpen sama anak frontend/mobile (misalnya di SharedPreferences atau SecureStorage), karena token ini yang bakal dipakai buat ngakses API lo ke depannya.
4. Bikin Route API yang "Dilindungi"
Sekarang, mari kita tes. Buka file routes/api.php. Kita bakal bikin rute yang cuma bisa diakses kalau user bawa token yang valid. Caranya gampang banget, tinggal bungkus route-nya pake middleware auth:sanctum.
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
// Route ini bebas diakses siapa aja (buat login)
Route::post('/login', [AuthController::class, 'login']);
// Route ini DILINDUNGI, wajib bawa token Sanctum!
Route::middleware('auth:sanctum')->group(function () {
// Contoh nampilin data profile user yang lagi login
Route::get('/user', function (Request $request) {
return $request->user();
});
// Lo bisa tambahin route lain buat fitur aplikasi lo di sini
// Route::get('/transaksi', [TransaksiController::class, 'index']);
});
Cara Ngetesnya di Postman / Insomnia
Buat mastiin API lo jalan, coba tes hit endpoint /api/user tadi lewat Postman.
Kalau lo nembak tanpa bawa token, sistem otomatis bakal nendang lo dengan pesan error (Unauthenticated).
Biar bisa masuk, lo harus masukin token yang lo dapet pas login ke bagian Headers atau Authorization (Bearer Token) di Postman:
Key:
AuthorizationValue:
Bearer {token_yang_didapet_dari_login}
Kesimpulan
Gimana, gampang banget kan? Pake Laravel Sanctum itu literally bikin hidup developer backend jauh lebih tenang. Setup-nya cepet, keamanannya standar industri, dan integrasi ke mobile app juga gampang banget.
Mulai sekarang, stop bikin API yang polosan tanpa security layer. Selamat ngoding dan semoga aplikasi mobile lo sukses rilis tanpa celah keamanan!

Posting Komentar untuk "Cara Mengamankan Rest API Laravel Menggunakan Sanctum untuk Aplikasi Mobile"