Halo, udah lama ga ngeposting, yu kali saya akan membagikan tutorial JWT pada Laravel. Sebelumnya kalian tau ga apa itu JWT?, sederhananya JWT atau JSON Web Token itu menggunakan token berbentik string Panjang dan random. Nah token tersebut kita gunakan nantinya untuk akses seperti session pada PHP, contohnya mengakses menu admin. Cara kerjanya seperti password Ketika user sukses login, dan nanti token yang didapat akan disimpan pada local storage browser.
Yuk kita langsung aja ke tutorial menggunakan JWT pada Laravel
Pertama kita buat terlebih dahulu project Laravel kita dengan mengetikkan perintah berikut dan tunggu sampai prosesnya selesai
composer create-project laravel/laravel laravel-jwt
Sekarang masuk ke dalam project Laravel kita yang Bernama laravel-jwt , bisa dengan code editor seperti VSCode.
Kita atur terlebih dahulu database kita, silahkan buat terlebih dahulu databasenya lalu masuk ke file .env dan atur databasenya
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_9_auth
DB_USERNAME=root
DB_PASSWORD=
Kalau sudah kita atur kita lakukan migrate dengan perintah berikut
php artisan migrate:fresh
Masih di dalam folder project silahkan buka terminal, cmd atau yang lain. Disini kita akan menggunakan thirt-party JWT tymon/jwt-auth , dan untuk install nya silakan ketik kode berikut pada terminal/cmd
composer require tymon/jwt-auth:*
Kalau sudah selesai silahkan buka app.php pada config\app.php lalu tambahkan kode berikut pada providers dan aliases
'providers' => [
....
....
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
'aliases' => [
....
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
....
],
Selanjutnya kita publish confignya dengan mengetikan perintah berikut pada terminal/cmd, maka nanti akan ada file baru dengan nama jwt.php pada folder config
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
dan sekarang kita ketik perintah berikut untuk meng handle token dan juga akan membuat otomatis script pada .env JWT_SECRET=secret_jwt_string_key
php artisan jwt:secret
Selanjunya kita atur juga auth.php pada config\auth.php
Silahkan sesuaikan dengan kode berikut
<?php
return [
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
'hash' => false,
],
],
Saatnya kita mengatur model User dengan JWT yang kita install sebelumnya, silahkan masuk ke model User lalu buka. Pertama kita tambahkan
use Tymon\JWTAuth\Contracts\JWTSubject;
Dan kita implement class ke JWTSubject
class User extends Authenticatable implements JWTSubject
dan terakhir kita tambahkan dua method yaitu getJWTIdentifier dan getJWTCustomClaims.
Kode lengkapnya dapat dilihat dibawah ini
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Laravel\Sanctum\HasApiTokens;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
Sekarang kita buat AuthController dengan mengetikkan perintah berikut
php artisan make:controller AuthController
Silahkan sesuaikan dengan kode berikut
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
class AuthController extends Controller
{
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required|string|min:6',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
if (!$token = auth()->attempt($validator->validated())) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->createNewToken($token);
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|between:2,100',
'email' => 'required|string|email|max:100|unique:users',
'password' => 'required|string|confirmed|min:6',
]);
if ($validator->fails()) {
return response()->json($validator->errors()->toJson(), 400);
}
$user = User::create(array_merge(
$validator->validated(),
['password' => bcrypt($request->password)]
));
return response()->json([
'message' => 'User successfully registered',
'user' => $user
], 201);
}
public function logout()
{
auth()->logout();
return response()->json(['message' => 'User successfully signed out']);
}
public function userProfile()
{
return response()->json(auth()->user());
}
protected function createNewToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60,
'user' => auth()->user()
]);
}
}
Setelah controller kita buat sekarang kita atur route api, buka pada routes\api.php dan atur jadi kode berikut
<?php
use App\Http\Controllers\AuthController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::post('login', [AuthController::class, 'login']);
Route::post('register', [AuthController::class, 'register']);
Route::group(['middleware' => ['auth:api']], function () {
Route::get('logout', [AuthController::class, 'logout']);
Route::get('user-profile', [AuthController::class, 'userProfile']);
});
Saatnya kita coba menjalankan project JWT kita, caranya dengan mengetik perintah berikut
php artisan serve
Lalu kita uji coba, uji coba disini saya menggunakan aplikasi Postman
Uji coba pertama pada register data user menggunakan method POST
Sekarang kita uji coba login, sama dengan register login juga menggunakan method POST
Selanjutnya uji coba mengambil data user menggunakan method GET, pada bagian authorization pada type menggunakan Bearer Token dan pada Token masukkan token yang didapat pada login sebelumnya.
Terakhir uji coba logout, logout menggunakan method GET dan jika sukses tampilannya akan jadi berikut ini
Oke, jadi sekian dulu postingan kali ini dan semoga bermanfaat. Full source code dapat dilihat disini
https://github.com/padhilahm/Laravel-9-JWT
Comments (3)
Reza
2 years agoMakasih bang
Reply CancelTeknik Elektro
1 year agoBagaimana cara membuat token JWT dengan menggunakan Laravel 9? <a href="https://journals.telkomuniversity.ac.id/">Tel U</a>
Reply CancelAdmin
Penulis 1 year agoUntuk JWT otomatis generate dari package pak Untuk codingnya bisa diliat diatas