Tutorial Laravel JWT #5 : Membuat RESTful API Login


Tutorial Laravel JWT #5 : Membuat RESTful API Login

Halo teman-teman semuanya, di artikel sebelumnya kita telah belajar bagaimana cara membuat proses register menggunakan Rest API. Dan sekarang kita akan lanjutkan belajar membuat proses otentikasi dan sekaligus melakukan generate token JWT atau JSON Web Token.

Langkah 1 - Membuat Controller Login

Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel-nya.

php artisan make:controller Api/LoginController -i

Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan file controller baru dengan nama LoginController.php yang berada di dalam folder app/Http/Controllers/Api.

Silahkan buka file tersebut dan ubah semua kode-nya menjadi seperti berikut ini.

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;

class LoginController extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        //set validation
        $validator = Validator::make($request->all(), [
            'email'     => 'required',
            'password'  => 'required'
        ]);

        //if validation fails
        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }

        //get credentials from request
        $credentials = $request->only('email', 'password');

        //if auth failed
        if(!$token = auth()->guard('api')->attempt($credentials)) {
            return response()->json([
                'success' => false,
                'message' => 'Email atau Password Anda salah'
            ], 401);
        }

        //if auth success
        return response()->json([
            'success' => true,
            'user'    => auth()->guard('api')->user(),    
            'token'   => $token   
        ], 200);
    }
}

Dari penambahan kode di atas, pertama kita import Facades validator. Karena kita akan menggunakan validasi disini.

use Illuminate\Support\Facades\Validator;

Dan di dalam method __invoke, pertama kita akan melakukan definisi sebuah validasi terlebih dahulu, dimana validasi ini akan memastikan bahwa data yang dikirmkan sudah benar-benar sesuai dengan yang diharapkan.

//set validation
$validator = Validator::make($request->all(), [
    'email'     => 'required',
    'password'  => 'required'
]);

Dari rule validasi di atas, kurang lebih penjelasannya seperti berikut ini :

ATTRIBUE VALIDATION DESCRIPTION
email required field/input wajib diisi.
password required field/input wajib diisi.

Jika validasi di atas tidak terpenuhi, maka akan mengembalikan sebuah response error kurang lebih seperti berikut ini :

if ($validator->fails()) {
  return response()->json($validator->errors(), 422);
}

Tapi, jika validasi sudah sesuai dengan yang diharapkan, maka selanjutnya kita membuat sebuah variable dengan nama credentials, dimana variable tersebut akan kita gunakan untuk menyimpan data yang dikirimkan dari request berupa email dan password.

//get credentials from request
$credentials = $request->only('email', 'password');

Dan kita akan gunakan variable $credentials untuk melakukan attemp ke dalam guard api. Jika gagal, maka kita akan return ke dalam format JSON dengan isi email dan password salah.

//if auth failed
if(!$token = auth()->guard('api')->attempt($credentials)) {
    return response()->json([
        'success' => false,
        'message' => 'Email atau Password Anda salah'
    ], 401);
}

Tapi, jika proses attemp / login berhasil, maka kita akan return data user dan token JWT-nya ke dalam format JSON.

//if auth success
return response()->json([
    'success' => true,
    'user'    => auth()->guard('api')->user(),    
    'token'   => $token   
], 200);

Langkah 2 - Menambahkan Route Login dan Get User

Sekarang kita akan menambahkan 2 route baru yaitu untuk login dan get user. Silahkan buka file routes/api.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/**
 * route "/register"
 * @method "POST"
 */
Route::post('/register', App\Http\Controllers\Api\RegisterController::class)->name('register');

/**
 * route "/login"
 * @method "POST"
 */
Route::post('/login', App\Http\Controllers\Api\LoginController::class)->name('login');

/**
 * route "/user"
 * @method "GET"
 */
Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Di atas, kita menambahkan 2 route, yaitu :

  • /login - menggunakan method POST.
  • /user - menggunakan method GET.

Perlu kita perhatikan, untuk route /user kita tambahkan middleware auth:api, yang artinya route tersebut hanya bisa diakses jika user sudah melakukan proses login dan memiliki token JWT.

Langkah 3 - Uji Coba API Login

Sekarang kita akan lanjutkan untuk melakukan uji coba proses login. Silahkan buka aplikasi Postman dan masukkan URL berikut ini : http://localhost:8000/api/login dan untuk method-nya silahkan pilih POST.

Kemudian klik Send, maka kita akan mendapatkan error response validasi yang dikirimkan oleh controller, kurang lebih seperti berikut ini.

Sekarang, silahkan klik tab Body, kemudian pilih form-data dan masukkan key dan value berikut ini :

KEY VALUE
email isi email yang digunakan saat register.
password isi password yang digunakan saat register.

Jika sudah, silahkan klik Send, jika berhasil maka kita akan mendapatkan sebuah response JSON dengan beberapa informasi seperti data user yang sedang login dan token yang telah di generate oleh JWT.

{
    "success": true,
    "user": {
        "id": 1,
        "name": "Fika Ridaul Maulayya",
        "email": "admin@gmail.com",
        "email_verified_at": null,
        "created_at": "2022-05-18T02:30:18.000000Z",
        "updated_at": "2022-05-18T02:30:18.000000Z"
    },
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAvYXBpL2xvZ2luIiwiaWF0IjoxNjUyODcxOTU1LCJleHAiOjE2NTI4NzU1NTUsIm5iZiI6MTY1Mjg3MTk1NSwianRpIjoiSEE4SEpBRk9WQW9pS09GbyIsInN1YiI6IjEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.5KC0pwhIH9AqV47G_CZEE7XgLnM2e1hL7uKUuzo0TP0"
}

Setelah berhasil melakukan proses otentikasi, sekarang kita akan coba menampilkan data user yang telah login. Silahkan buka aplikasi Postman, kemudian masukkan URL berikut ini : http://localhost:8000/api/user dan untuk method-nya silahkan pilih GET.

Setelah itu, silahkan klik tab Header. Kemudian masukkan beberapa key dan value berikut ini :

KEY VALUE
Accept application/json
Content-Type application/json
Authorization Bearer <spasi> Token

CATATAN ! : untuk value Authorization, yaitu Bearer spasi Token yang digenerate saat proses login.

Jika sudah, silahkan klik Send dan jika berhasil maka kita akan mendapatkan sebuah response berupa JSON yang berisi informasi data user.

{
    "id": 1,
    "name": "Fika Ridaul Maulayya",
    "email": "admin@gmail.com",
    "email_verified_at": null,
    "created_at": "2022-05-18T02:30:18.000000Z",
    "updated_at": "2022-05-18T02:30:18.000000Z"
}

Sampai disini pembahasan bagaimana cara melakukan proses login dan generate token dengan JWT di dalam Laravel. Di artikel selanjutnya kita akan belajar bagaimana cara membuat proses logout.

Terima Kasih



Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami