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.

Referensi