Menggunakan Laravel Passport / Sanctum
Laravel Passport dan Laravel Sanctum adalah dua paket untuk mengelola otentikasi API di Laravel. Passport menggunakan OAuth2, sedangkan Sanctum lebih sederhana dan cocok untuk aplikasi SPA atau aplikasi berbasis mobile.
Pemasangan
Menginstal Laravel
Jika Anda belum memiliki proyek Laravel, Anda bisa membuatnya dengan perintah berikut:
composer create-project --prefer-dist laravel/laravel nama_proyek
Menginstal Laravel Passport
Untuk menginstal Laravel Passport, jalankan perintah berikut:
composer require laravel/passport
Setelah itu, jalankan perintah migrasi untuk membuat tabel yang diperlukan:
php artisan migrate
Kemudian, daftarkan service provider di config/app.php
(untuk Laravel < 5.5):
'providers' => [
...
Laravel\Passport\PassportServiceProvider::class,
],
Menginstal Laravel Sanctum
Untuk menginstal Laravel Sanctum, jalankan perintah berikut:
composer require laravel/sanctum
Setelah itu, jalankan perintah migrasi untuk membuat tabel yang diperlukan:
php artisan migrate
Kemudian, daftarkan middleware Sanctum di file api.php
:
use Laravel\Sanctum\Sanctum;
Route::middleware('auth:sanctum')->group(function () {
// Protected Routes
});
Konfigurasi Passport
Setelah instalasi, Anda perlu menjalankan perintah berikut untuk menghasilkan kunci enkripsi:
php artisan passport:install
Tambahkan HasApiTokens
ke model User
:
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
Menyiapkan Auth
Di config/auth.php
, atur driver API menjadi passport
:
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Menggunakan Passport
Mengeluarkan Token
Buat route untuk mengeluarkan token:
Route::post('login', function (Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($request->only('email', 'password'))) {
return response()->json([
'token' => Auth::user()->createToken('Token Name')->accessToken,
]);
}
return response()->json(['error' => 'Unauthorized'], 401);
});
Mengamankan Route
Untuk melindungi route, gunakan middleware auth:api
:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Menggunakan Sanctum
Mengeluarkan Token
Buat route untuk mengeluarkan token di Sanctum:
Route::post('login', function (Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($request->only('email', 'password'))) {
$user = Auth::user();
$token = $user->createToken('token_name')->plainTextToken;
return response()->json(['token' => $token]);
}
return response()->json(['error' => 'Unauthorized'], 401);
});
Mengamankan Route
Untuk melindungi route dengan Sanctum, gunakan middleware auth:sanctum
:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Kesimpulan
Baik Laravel Passport maupun Sanctum memiliki kelebihan masing-masing tergantung pada kebutuhan aplikasi Anda. Passport lebih sesuai untuk aplikasi besar yang memerlukan OAuth2, sedangkan Sanctum lebih sederhana dan ideal untuk aplikasi yang lebih kecil atau SPA.