Uji kemampuan Anda di semua layanan Hosting kami dan dapatkan diskon 15%!

Gunakan kode saat checkout:

Skills
19.06.2025

Membangun API Laravel yang Aman dengan Otentikasi JWT

Ketika membangun API dengan Laravel, memastikan autentikasi yang aman sangatlah penting, terutama ketika berurusan dengan data pengguna. JSON Web Token (JWT) menawarkan metode yang kuat untuk menangani autentikasi dalam aplikasi tanpa kewarganegaraan, yang memungkinkan pengiriman informasi pengguna yang aman antar pihak. Panduan ini akan memandu Anda melalui proses membangun API Laravel yang aman menggunakan autentikasi JWT.

Prasyarat

  • Pengetahuan dasar tentang PHP dan Laravel.
  • Laravel terinstal di komputer Anda (sebaiknya Laravel 9 atau yang lebih baru).
  • Komposer sudah terinstal.
  • MySQL atau basis data lain yang disiapkan untuk aplikasi Anda.

Langkah 1: Membuat Proyek Laravel Baru

Pertama, buatlah proyek Laravel baru menggunakan Composer:

composer create-project laravel/laravel laravel-jwt-api

Arahkan ke direktori proyek Anda:

cd laravel-jwt-api

Langkah 2: Instal Paket Otentikasi JWT

Paket yang paling umum digunakan untuk otentikasi JWT di Laravel adalah tymon/jwt-auth. Instal paket ini menggunakan Composer:

composer require tymon/jwt-auth

Setelah instalasi paket, publikasikan konfigurasi JWT:

php artisan vendor:publish --provider ="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Ini akan membuat berkas config/jwt.php di dalam proyek Anda.

Langkah 3: Membuat Kunci Rahasia JWT

Buatlah kunci rahasia yang akan digunakan JWT untuk menandatangani token:

php artisan jwt:secret

Ini akan menambahkan entri JWT_SECRET ke berkas .env Anda, yang digunakan untuk menyandikan dan mendekodekan token.

Langkah 4: Siapkan Otentikasi

Untuk menyiapkan autentikasi JWT, Anda perlu mengonfigurasi penjaga default untuk API Anda. Perbarui berkas config/auth.php sebagai berikut:

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
Inimemberi tahu Laravel untuk menggunakan driver jwt untuk permintaan API dan mengautentikasi terhadap penyedia pengguna.

Langkah 5: Membuat Model Pengguna dan Migrasi

Jika Anda belum membuat model User, Anda dapat membuatnya bersama dengan berkas migrasinya:

php artisan make:model User -m

Buka file migrasi yang telah dibuat di database/migrations/ dan tambahkan kolom yang diperlukan, seperti nama, email, dan kata sandi:

public function up()
{
Schema::create('users', function (Cetak Biru $tabel) {
$table->id();
$tabel->string('nama');
$tabel->string('email')->unique();
$tabel->string('password');
$tabel->stempel waktu();
});
}

Jalankan migrasi untuk membuat tabel pengguna:

php artisan migrasi

Langkah 6: Menerapkan Metode JWT dalam Model Pengguna

Dalam model Pengguna(app/Models/User.php), implementasikan antarmuka JWTSubject dan metode yang diperlukan:

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey(); // Usually the primary key (id)
}
public function getJWTCustomClaims()
{
return [];
}
}

Langkah 7: Membuat Pengontrol Autentikasi

Buat pengontrol untuk menangani autentikasi pengguna:

php artisan make:controller AuthController

Di dalam AuthController.php, tambahkan metode untuk mendaftarkan pengguna, masuk, dan keluar:


'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = JWTAuth::fromUser($user);
return response()->json(['token' => $token], 201);
}
// User Login
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = Auth::attempt($credentials)) {
return response()->json(['error' => 'Invalid credentials'], 401);
}
return response()->json(['token' => $token]);
}
// Logout User (Invalidate Token)
public function logout()
{
Auth::logout();
return response()->json(['message' => 'Successfully logged out']);
}
// Get Authenticated User
public function me()
{
return response()->json(Auth::user());
}
}

Langkah 8: Tentukan Rute API

Tambahkan rute untuk autentikasi di routes/api.php:

use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
// Protected routes (require JWT token)
Route::middleware('auth:api')->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::get('me', [AuthController::class, 'me']);
});

Rute ini menangani pendaftaran pengguna, masuk, keluar, dan mengambil pengguna yang diautentikasi.

Langkah 9: Melindungi Rute API

Untuk melindungi rute API lainnya, Anda dapat menggunakan middleware auth:api. Misalnya, jika Anda memiliki rute sumber daya untuk posting:

Route::middleware('auth:api')->group(function () {
Route::resource('posts', PostController::class);
});

Hal ini memastikan bahwa hanya pengguna yang terautentikasi yang dapat mengakses rute ini.

Langkah 10: Menguji API

Anda bisa menguji API Anda menggunakan alat seperti Postman atau cURL.

  • Daftarkan pengguna:
    POST /api/register
    Host: your-domain.com
    Content-Type: application/json
    {
    "name": "John Doe",
    "email": "john@example.com",
    "password": "password",
    "password_confirmation": "password"
    }
  • Masuk:
    POST /api/login
    Host: your-domain.com
    Content-Type: application/json
    {
    "email": "john@example.com",
    "password": "password"
    }
    Ini akan mengembalikan token yang dapat Anda gunakan untuk mengautentikasi permintaan lainnya.
  • Mengakses rute yang dilindungi: Untuk mengakses rute yang dilindungi seperti GET /api/me, sertakan token di header Otorisasi:
    Otorisasi: Pembawa

Langkah 11: Menyegarkan Token JWT (Opsional)

Untuk menyegarkan token, Anda dapat menambahkan sebuah metode di AuthController:

public function refresh()
{
$token = Auth::refresh();
return response()->json(['token' => $token]);
}

Tambahkan rute untuk penyegaran:

Route::post('refresh', [AuthController::class, 'refresh'])->middleware('auth:api');

Kesimpulan

Dengan mengikuti panduan ini, Anda telah membangun API Laravel yang aman dengan autentikasi JWT, yang memungkinkan registrasi pengguna, login, dan akses ke rute yang dilindungi. JWT memungkinkan Anda untuk mempertahankan mekanisme autentikasi tanpa kewarganegaraan, yang sangat berguna untuk menskalakan API. Dengan pengaturan ini, Anda dapat menyesuaikan logika autentikasi aplikasi Anda lebih lanjut dan mengintegrasikan fitur-fitur tambahan, seperti kontrol akses berbasis peran dan menyegarkan token untuk sesi yang berumur panjang.

Uji kemampuan Anda di semua layanan Hosting kami dan dapatkan diskon 15%!

Gunakan kode saat checkout:

Skills