• Banjarbaru, Kalimantan Selatan
EokrhtcESygP5nQ0wr20nreyrqt1eWwiBq0QrIjD.png
1 year ago

Tutorial Menggunakan JWT pada Laravel 9

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

 

Membuat project 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

Masuk ke dalam folder project

Sekarang masuk ke dalam project Laravel kita yang Bernama laravel-jwt , bisa dengan code editor seperti VSCode.

 

Mengatur database

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

 

Install dan konfigurasi JWT package

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,
        ],
    ],

 

Mengatur model User

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 [];
    }
}

 

Membuat AuthController

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()
        ]);
    }
}

 

Mengatur Route API

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']);
});

 

Menjalankan project Laravel

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)

client

Reza

1 year ago

Makasih bang

Reply
client

Teknik Elektro

1 year ago

Bagaimana cara membuat token JWT dengan menggunakan Laravel 9? <a href="https://journals.telkomuniversity.ac.id/">Tel U</a>

Reply
client

Admin

Penulis 1 year ago

Untuk JWT otomatis generate dari package pak Untuk codingnya bisa diliat diatas

Leave a Reply