← Back to post
REST API

Membuat API JWT dengan Cookie di Laravel

Table of Contents



Apa sih API JWT dengan Cookie di Laravel 10?


API JWT dengan Cookie di Laravel 10 adalah sebuah cara untuk membuat API yang menggunakan JSON Web Token (JWT) untuk autentikasi dan menggunakan Cookie untuk menyimpan token. JWT adalah sebuah standar terbuka yang mendefinisikan cara untuk mentransmisikan informasi yang aman antara dua pihak. JWT biasanya digunakan untuk autentikasi dan pertukaran informasi antara aplikasi klien dan server. Dengan menggunakan JWT, kita bisa membuat API yang aman dan efisien.

Laravel 10 adalah sebuah framework PHP yang populer untuk membuat aplikasi web. Laravel 10 memiliki banyak fitur yang memudahkan kita untuk membuat API yang aman dan efisien. Dengan menggunakan Laravel 10, kita bisa membuat API JWT dengan Cookie dengan mudah dan cepat.

API JWT dengan Cookie di Laravel 10 memiliki beberapa keuntungan, antara lain:

  • Keamanan
  • Efisiensi
  • Mudah digunakan
  • Mudah diintegrasikan dengan aplikasi web dan mobile



Cara Membuat API JWT dengan Cookie di Laravel 10


Berikut adalah langkah-langkah untuk membuat API JWT dengan Cookie di Laravel 10:

Install Laravel 10

Pertama, kita perlu menginstall Laravel 10. Kita bisa menginstall Laravel 10 dengan menggunakan composer. Berikut adalah perintah untuk menginstall Laravel 10:

composer create-project laravel/laravel myapp

Install Package Sanctum

Setelah kita menginstall Laravel 10, kita perlu menginstall package Sanctum. Package Sanctum adalah package yang digunakan untuk membuat API JWT dengan Cookie di Laravel 10. Berikut adalah perintah untuk menginstall package Sanctum:

composer require laravel/sanctum

kemudian, kamu perlu publish konfigurasi Sanctum dengan menggunakan perintah vendor:publish. konfigurasi ini akan disimpan di config/sanctum.php.

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Setelah itu, kamu perlu menjalankan migrasi untuk membuat tabel-tabel yang diperlukan oleh Sanctum.

php artisan migrate

Pada model User, kamu perlu menambahkan trait HasApiTokens untuk menggunakan Sanctum.

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    // Code
}

Membuat controller untuk autentikasi

Setelah kita menginstall package Sanctum, kita perlu membuat controller untuk autentikasi

Jalankan perintah berikut untuk membuat controller API/AuthController:

php artisan make:controller API/AuthController

Kaitkan controller dengan model User dan import beberapa class yang diperlukan.

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\HttpFoundation\Response;

Fungsi register untuk mendaftarkan user baru sekaligus memberi token ke user tersebut.

public function register(Request $request)
{
    $user = User::create([
        'username' => $request->username,
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);

    $token = $user->createToken('token')->plainTextToken;

    $cookie = cookie('jwt', $token, 60 * 48); // 2 day

    return response([
        'status' => 'success',
        'message' => $token
    ])->withCookie($cookie);
}

Fungsi login untuk login user dan memberi token ke user

public function login(Request $request)
{
    if (!Auth::attempt($request->only('username', 'password'))) {
        return response([
            'status' => 'error',
            'message' => 'Invalid credentials'
        ], 401);
    }

    $user = Auth::user();

    $token = $user->createToken('token')->plainTextToken;

    $cookie = cookie('jwt', $token, 60 * 48); // 2 day

    return response([
        'status' => 'success',
        'message' => $token
    ])->withCookie($cookie);
}

Fungsi logout untuk logout user dan menghapus token dari user

public function logout()
{
    $cookie = Cookie::forget('jwt');

    return response([
        'status' => 'success',
        'message' => 'Token deleted'
    ])->withCookie($cookie);
}



Routing untuk otentikasi API

Apa itu routing? Routing adalah cara untuk menentukan URL mana yang akan diarahkan ke controller mana.

Pada file routes/api.php, tambahkan routing untuk autentikasi API.

// Route untuk register user
Route::post('/register', [App\Http\Controllers\API\AuthController::class, 'register']);
// Route untuk login user
Route::post('/login', [App\Http\Controllers\API\AuthController::class, 'login']);

Route::middleware('auth:sanctum')->group(function () {
    // Route untuk mendapatkan user yang sedang login
    Route::get('/user', [App\Http\Controllers\API\AuthController::class, 'user']);
    // Route untuk logout user
    Route::post('/logout', [App\Http\Controllers\API\AuthController::class, 'logout']);
});



Test Dengan Postman

Setelah kita membuat API JWT dengan Cookie di Laravel 10, kita bisa mencoba API tersebut dengan menggunakan Postman. Postman adalah sebuah aplikasi yang digunakan untuk menguji API. Berikut adalah langkah-langkah untuk mencoba API JWT dengan Cookie di Laravel 10 dengan menggunakan Postman:

Register User

Pertama, kita perlu mendaftarkan user baru. Kita bisa mendaftarkan user baru dengan menggunakan endpoint /register. Berikut adalah langkah-langkahnya:

  • Buka Postman

  • Pilih method POST

  • Masukkan URL http://tg-connect-rest.test/api/register

  • Masukkan body dengan format x-www-form-urlencoded dan isi dengan data user yang ingin didaftarkan (username, name, email, password) dengan format JSON Contoh:

    {
      "username": "haidar",
      "name": "Haidar",
      "email": "haidar@email.com",
      "password": "password"
    }
  • Klik Send

    Jika berhasil, maka kita akan mendapatkan token yang disimpan di cookie. Berikut adalah contoh responsenya:

    {
      "status": "success",
      "message": "1|IJwniShhh8r7jCMT0jqatS2ZDXdXnJKMXZxaC2F887afd0f1"
    }

Route untuk mendapatkan user yang sedang login

Setelah kita mendaftarkan user baru, kita bisa mencoba route untuk mendapatkan user yang sedang login. Kita bisa mencoba route tersebut dengan menggunakan endpoint /user. Berikut adalah langkah-langkahnya:

  • Buka Postman

  • Pilih method GET

  • Masukkan URL http://tg-connect-rest.test/api/user

  • Klik Send

    Jika berhasil, maka kita akan mendapatkan data user yang sedang login, berikut adalah contoh responsenya:

    {
      "id": 1,
      "username": "haidar",
      "name": "Haidar",
      "email": "haidar@email.com",
      "email_verified_at": null,
      "created_at": "2024-03-10T17:05:57.000000Z",
      "updated_at": "2024-03-10T17:05:57.000000Z"
    }



Kesimpulan

API JWT dengan Cookie di Laravel 10 adalah sebuah cara untuk membuat API yang menggunakan JSON Web Token (JWT) untuk autentikasi dan menggunakan Cookie untuk menyimpan token. Dengan menggunakan Laravel 10 dan package Sanctum, kita bisa membuat API JWT dengan Cookie dengan mudah dan cepat. API JWT dengan Cookie di Laravel 10 memiliki beberapa keuntungan, antara lain keamanan, efisiensi, mudah digunakan, dan mudah diintegrasikan dengan aplikasi web dan mobile. Dengan menggunakan Postman, kita bisa mencoba API JWT dengan Cookie di Laravel 10 dengan mudah dan cepat.

Terima kasih telah membaca artikel ini, semoga bermanfaat👍👍