tutorial laravel

Tutorial Laravel Api Passport, Otentikasi User Pada REST API

Pada kesempatan ini kita akan membahas tentang tutorial laravel rest api menggunakan passport sebagai otentikasi user. Apa itu rest api? rest api atau api atau restful api atau web service secara garis besar sama saja, merupakan state transfer protokol berbasis http, dan passport itu sendiri adalah otentikasi api default dari laravel yang di buat berdasarkan library League OAuth2 Server, jadi sebenarnya tidak menggunakan passport dan langsung menggunakan library oauth2 pun sah-sah saja. Baiklah tanpa berbasa-basi lagi, langsung saja kita masuk pada pembahasan Tutorial Laravel REST API, Menggunakan Otentikasi Passport.

By the way, artikel ini adalah kelanjutan dari artikel (https://soft-gain.com/2020/06/10/tutorial-export-excel-laravel-aplikasi-inventory-part-6/), dimana kita akan coba kembangkan aplikasi yang sudah kita buat sebelumnya menjadi serbuah web service.

Pertama-tama kita install terlebih dahulu library laravel/passport pada aplikasi kita, saya di sini menggunakan passport versi 7.5.1 karena latest version-nya sudah tidak support dengan versi laravel yang saya gunakan (laravel 5.8). Ketikan perintah ini pada terminal :

composer require laravel/passport:7.5.1

Lalu kita lakukan migasi untuk mendapatkan table yang akan kita gunakan untuk menampung token, gunakan perintah berikut ini :

php artisan migrate

Selanjutnya ketikan perintah ini :

php artisan passport:install

Mengacu pada dokumentasi resmi (https://laravel.com/docs/7.x/passport), perintah ini akan meng-generate keys yang akan kita gunakan untuk membuat access token nantinya, baik itu personal access ataupun password grant. Apa bedanya? personal access biasa di gunakan untuk 3rd party aplication yang hendak mengakses data dari server kita tanpa harus memasukan credentials user (dengan alasan security), jadi pengguna mempunyai access token masing-masing tanpa harus mengetahui credentials user. Sedangkan password grant biasa di gunakan oleh first party client (seperti pengembangan aplikasi berbasis andriod) karena pengguna memiliki credentials user yang valid, sumber (https://stackoverflow.com/questions/54275082/what-are-the-main-difference-between-personal-access-client-and-password-client).

Selanjutnya kita akan merubah sedikit model user, kurang lebih jadi seperti ini :

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'role',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

Berikutnya kita akan merubah AuthServiceProvider.php, kurang lebih jadi seperti ini :

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        // 'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        Passport::routes();
        //
    }
}

Penambahan Passport::routes(); di atas menjadi penting, karena dengan method ini lah kita akan mendaftar kan routes yang akan di gunakan untuk meng-generate atau revoke access token.

Berikutnya kita akan merubah file config/auth.php, ubah pada bagian guards menjadi seperti ini :

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            // 'hash' => false,
        ],
],

Berikutnya kita akan menambahkan router yang hendak kita gunakan untuk meng-handle request api yang masuk pada aplikasi kita. Di laravel versi 5.8 ini sudah di pisahkan route khusus untuk api, jadi tinggal buka saja file api.php dan isi tambahkan baris ini :

Route::post('login', 'Api\AuthController@login');

Selanjutnya kita akan membuat controller, masukan perintah berikut ini pada terminal :

php artisan make:controller Api/AuthController

Kita akan membuat controller dalam folder Api, jadi controller api kita akan pisahkan dengan controller untuk handle request non-api. Tambahkan fungsi login sehingga menjadi seperti ini :

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
	public function login(){
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
            $user = Auth::user();
            $success['token'] =  $user->createToken('myinventory')->accessToken;

            return response()->json(['success' => $success], 200);
        }
        else{
            return response()->json(['error'=>'Unauthorised'], 401);
        }
    }
}

Jika sudah selesai tinggal kita test menggunakan postman, postman ini adalah tools gratis yang bisa kita gunakan untuk testing / develop web service. Masukan parameter dan url seperti gambar di bawah ini :

Login API

Jika kita mendapatkan response sukses maka kita telah berhasil membuat dan mengimplementasikan laravel passport sebagai otentikasi api kita. Token yang kita dapat ini lah yang akan kita gunakan sebagai validasi apakah pengguna berhak mengakses resource dari server kita atau tidak. Demikian, terima kasih.

2 thoughts on “Tutorial Laravel Api Passport, Otentikasi User Pada REST API

Leave a Reply

Your email address will not be published. Required fields are marked *