Implementasi JWT (JSON Web Token) di Laravel
Dipublikasikan pada oleh Admin
JWT atau JSON Web Token adalah metode autentikasi modern yang banyak digunakan pada aplikasi API, mobile, dan SPA (Single Page Application).
Dalam artikel ini kita akan membahas:
JWT (JSON Web Token) adalah standar terbuka (RFC 7519) untuk pertukaran informasi antar sistem dengan cara yang aman.
Token ini biasanya digunakan untuk proses autentikasi dan otorisasi tanpa harus menyimpan sesi di server.
JWT memiliki tiga bagian utama:
Meskipun JWT menangani sesi autentikasi, proses login tetap memerlukan password.
Laravel sudah menyediakan fasilitas hashing yang aman untuk menyimpan password:
Berikut langkah demi langkah membuat autentikasi JWT di Laravel menggunakan paket
Perintah terakhir akan menambahkan Buka file Tambahkan implementasi Isi dengan kode berikut:
JWT memberikan solusi autentikasi modern yang ringan dan efisien, terutama untuk aplikasi berbasis API.
Dengan menggabungkan hashing password Laravel dan sistem token JWT, kamu dapat menciptakan autentikasi yang kuat, aman, dan mudah diintegrasikan dengan berbagai platform.
Ditulis oleh ChatGPT – asisten developer LaravelImplementasi JWT (JSON Web Token) di Laravel untuk Autentikasi Aman
1. Apa Itu JWT?
base64url(header) . base64url(payload) . signature2. Keunggulan dan Tantangan JWT
Keunggulan
role dan scope.Tantangan
3. Keamanan Password
Hash::make() saat menyimpan password.Hash::check() saat memverifikasi login.4. Tutorial Implementasi JWT di Laravel
php-open-source-saver/jwt-auth.
Langkah 1 — Instalasi Laravel
composer create-project laravel/laravel jwt-app
cd jwt-app
php artisan migrateLangkah 2 — Instal Paket JWT
composer require php-open-source-saver/jwt-auth
php artisan vendor:publish --provider="PHPOpenSourceSaver\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secretJWT_SECRET ke file .env.Langkah 3 — Konfigurasi Guard API
config/auth.php dan ubah guard api menjadi:'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
'hash' => false,
],
],Langkah 4 — Ubah Model User
JWTSubject ke model User:use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}Langkah 5 — Buat Controller Autentikasi
php artisan make:controller AuthControllernamespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function __construct()
{
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
public function register(Request $request)
{
$request->validate([
'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 = Auth::guard('api')->login($user);
return response()->json([
'status' => 'success',
'user' => $user,
'authorization' => [
'token' => $token,
'type' => 'bearer',
],
]);
}
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (! $token = Auth::guard('api')->attempt($credentials)) {
return response()->json(['message' => 'Unauthorized'], 401);
}
return response()->json([
'status' => 'success',
'user' => Auth::guard('api')->user(),
'authorization' => [
'token' => $token,
'type' => 'bearer',
],
]);
}
public function logout()
{
Auth::guard('api')->logout();
return response()->json(['message' => 'Logged out successfully']);
}
public function refresh()
{
return response()->json([
'status' => 'success',
'user' => Auth::guard('api')->user(),
'authorization' => [
'token' => Auth::guard('api')->refresh(),
'type' => 'bearer',
],
]);
}
}Langkah 6 — Tambahkan Route API
use App\Http\Controllers\AuthController;
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
Route::post('logout', [AuthController::class, 'logout']);
Route::post('refresh', [AuthController::class, 'refresh']);
Route::middleware('auth:api')->get('/user-profile', function (Request $request) {
return $request->user();
});5. Pengujian API dengan Postman
POST /api/register dengan data nama, email, dan password.POST /api/login untuk mendapatkan token JWT.GET /api/user-profile dengan header Authorization: Bearer <token>.POST /api/logout untuk mencabut token.POST /api/refresh untuk memperbarui token.6. Tips dan Best Practice
TTL token agar tidak berlaku terlalu lama.7. Kesimpulan