Membuat API Login dan Mengimplementasikan User Token untuk Melindungi API Produk

Selanjutnya mari kita membuat API digunakan oleh user untuk login dan kita juga akan memberikan token yang akan digunakan oleh user untuk mengakses AP...

cover Membuat API Login dan Mengimplementasikan User Token untuk Melindungi API Produk

Selanjutnya mari kita membuat API digunakan oleh user untuk login dan kita juga akan memberikan token yang akan digunakan oleh user untuk mengakses API yang kita miliki.

Mari kita buat method login pada file UserController.php

 public function login(Request $request)
    {
        $this->validate($request,[
            'email' => 'required|email',
            'password' => 'required|min:5'
        ]);

        $email = $request->input('email');
        $password = $request->input('password');

        $user = User::where('email', $email)->first();
        if(!$user) {
            return response()->json(['message' => 'Gagal Masuk'],401);
        }
        $isValidPassword = Hash::check($password, $user->password);
        if(!$isValidPassword) {
            return response()->json(['message' => 'Gagal Masuk'],401);
        }

        $generateToken = bin2hex(random_bytes(40));
        $user->update([
            'token' => $generateToken
        ]);

        return response()->json($user);
    }

Setelah itu kita akan mendaftarkan route nya pada file web.php

$router->post('/login', 'UserController@login');

Mari kita coba API login tersebut menggunakan POSTMAN

Dan akhirnya berhasil, kita dapat melihat ada data token disana, token ini lah yang akan dibawa terus oleh user untuk dapat mengakses API yang ada.

Mengimplementasikan Token

Setelah kita selesai membuat semua API yang kita butuhkan dan kita juga sudah mengenerate token yang akan digunakan oleh user, kini saatnya kita akan mengimplementasikannya.

Hal yang perlu kita lakukan pertama sekali adalah meng-uncomment middleware authenticate yagn terdapat pada App/bootstrap/app.php

$app->routeMiddleware([
    'auth' => App\Http\Middleware\Authenticate::class,
]);

Silahkan teman-teman lihat file Authenticate.php

 public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            return response('Unauthorized.', 401);
        }

        return $next($request);
    }

Terdapat method handle disana, apa sih method handle itu? jadi sederhana nya teman-teman setiap request seperti GET, POST dll akan melewati middleware ini terlebih dahulu, dan jika token yang dibawa oleh user tidak valid maka dia akan memberikan response Unauthorized dengan htpp response code nya 401, lalu bagaimana jika ingin mengimplementasikan nya ? Silahkan teman-teman tambahkan kode berikut pada file ProdukController.php

public function __construct()
    {
        $this->middleware('auth');
    }

Lalu silahkan akses http://localhost:8000/produk untuk menampilkan semua produk menggunakan POSTMAN dengan menthod GET

Maka akan menampilkan response Unauthorized

Mari kita buka file app/Providers/AuthServiceProvider.php

Nah teman-teman inti dari authentikasi yang kita buat terdapat pada method boot ini, saya akan tunjukan kepada teman-teman semua

Coba kita ubah sedikit isi dari method boot menjadi seperti ini

<?php

namespace App\Providers;

use App\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Boot the authentication services for the application.
     *
     * @return void
     */
    public function boot()
    {
        // Here you may define how you wish users to be authenticated for your Lumen
        // application. The callback which receives the incoming request instance
        // should return either a User instance or null. You're free to obtain
        // the User instance via an API token or any other method necessary.

        $this->app['auth']->viaRequest('api', function ($request) {
            $token = $request->header('token');
            if ($token === 'tokenapi'){
                return new User();
                }
        });
    }
}

Disini saya men-set token nya adalah ‘tokenapi’ , teman-teman silahkan tambahkan token pada header di POSTMAN dengan value nya adalah ‘tokenapi’, lalu coba akses salah satu API yang sudah kita buat

Dan hasilnya adalah

Kita berhasil mengakses dan mendapatkan data dari API tersebut, nah sekarang tugas kita adalah mengganti token yang semula adalah ‘tokenapi’ yang masih statis kita tetapkan menjadi token yang didapatkan oleh user pada saat login.

Silahkan ubah kode pada method boot tersebut menjadi seperti dibawah ini

<?php

namespace App\Providers;

use App\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Boot the authentication services for the application.
     *
     * @return void
     */
    public function boot()
    {
        // Here you may define how you wish users to be authenticated for your Lumen
        // application. The callback which receives the incoming request instance
        // should return either a User instance or null. You're free to obtain
        // the User instance via an API token or any other method necessary.

        $this->app['auth']->viaRequest('api', function ($request) {
            $token = $request->header('token');
            if ($request->header('token')) {
                return User::where('token', $token)->first();
            }
        });
    }
}

Mari kita coba menggunakan POSTMAN

Pada saat user login maka token akan tergenerate, token ini akan digunakan oleh user untuk dapat mengakses API yang ada, kita akan meletakan token ini pada header.

> Perlu di ingat bahwa token ini akan terus berubah, setiap kali user login maka secara otomatis token juga akan tergenerate

Mari kita coba menggunakan POSTMAN, silahkan isi key dan value pada headers seperti dibawah ini

Selanjutnya tekan tombol send

Dan berhasil, kita dapat mengakses API yang menampilkan semua data produk.

Akhirnya seri belajar Mengimplementasikan RESTful API Pada Micro Framework Lumen 7.x telah selesai. Semoga bermanfaat, terimakasih

avatar nel09
@nel09

0 Kontribusi 0 Poin

Diperbarui 3 tahun yang lalu

Bagian dari artikel seri

Belum ada Jawaban. Jadi yang pertama Jawaban

Login untuk ikut Jawaban