Belajar Laravel Passport Untuk Membuat Rest Api Laravel

4 min read

Pada artikel ini kita akan mencoba mengekplorasi tentang fitur dari laravel versi 5.3 keatas yaitu laravel passport.Laravel Passport merupakan library dari laravel yang dibangun berdasarkan konsep OAuth2. OAuth2 biasanya digunakan untuk mengautentikasi penggunaan API pada aplikasi pihak ketiga, atau aplikasi pihak pertama (milik kita sendiri). Library passport ini sendiri sering digunakan untuk mempermudah Authentikasi pada Rest Api Client dikarenakan pada komunikasi data pada Rest Api sendiri kita tidak mungkin akan menggunakan cookie ataupun session untuk menyimpan credential kita sebagai validasi sehingga untuk mengatasi itu kita menggunakan token dari laravel passport ini sebagai authentikasi. Untuk dokumentasi lengkapnya kalian bisa membacanya di dokumentasi dari laravel.

Untuk tujuan akhir sendiri kita akan belajar membuat Rest Api untuk login, register dan logout serta membuat authentikasi dari Rest Api tersebut menggunakan token.

Untuk Requirements pada tutorial ini adalah

  • Laravel versi 5.3 keatas. Di tutorial ini saya menggunakan versi laravel 5.8
  • Library laravel passport
  • composer
  • xampp

Membuat Rest Api Login dan Register dengan Laravel Passport

Sebelum kita memulai mempraktikkan tutorial pada kali ini terlebih dahulu alangkah baiknya kita persiapkan requirement yang kita akan butuhkan pada praktik ini.

Untuk langkah yang pertama, lakukan instalasi laravel dengan menggunakan composer dengan mengetikkan perintah seperti berikut ini :

composer create-project --prefer-dist laravel/laravel belajar_passport

Setelah itu install Passport package, dengan menjalankan command berikut:

composer require laravel/passport

Setelah package berhasil di install, buka folder project belajar_passport dan masuk ke folder config/app.php dan tambahkan potongan code berikut pada bagian providers:

Laravel\Passport\PassportServiceProvider::class,

Kemudian buat database baru pada database mySQL kalian dengan menggunakan php myAdmin.

Setting file .env pada laravel pada bagian database mysql dan samakan dengan settingan database kalian seperti pada contoh berikut ini:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=belajar_passport
DB_USERNAME=root
DB_PASSWORD=

Edit file database/migratio/2014_10_12_000000_create_users_table.php pada bagian function up() menjadi seperti dibawah ini :

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->string('id');
            $table->string('username');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->integer('role')->default(0);
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Setelah itu lakukan migrasi database dengan mengetikkan perintah sebagai berikut :

php artisan migrate

Setelah melakukan migrasi tabel user selanjutnya kita akan mengenerate token keys dengan menggunakan perintah seperti di bawah ini :

php artisan passport:install

Pastikan proses migrasi serta generate token keys tadi berjalan sempurna hingga terbentuk struktur tabel pada database kalian seperti pada gambar dibawah ini :

Belajar Laravel Passport

Mengedit Model User

Setelah itu kita akan memodifikasi model User kita dengan menambahkan beberapa atribut pada file app/User.php pada bagian $fillable sehingga seperti pada scribt di bawah ini :

<?php

namespace App;

// laravel passport token
use HashApiTokens;
use Laravel\Passport\HasApiTokens;
// laravel passport token

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

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */

    protected $fillable = [
        'id','username', 'email', 'password','role'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */

    protected $hidden = [
        'password', 'remember_token','role'
    ];

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

Penjelasan :

Dari scribt diatas kita menambahkan atribut id serta role pada variabel $fillable. Attribut id kita tambahkan karena pada tutorial ini nantinya id akan diisi oleh user ketika proses register.

Mengedit file app/Providers/AuthServiceProvider.php

Pada file ini kita mendaftarkan route yang diperlukan untuk mengeluarkan access token dan menghapus access token, clients, dan personal access tokens pada library laravel passport. Untuk mendaftarkan route tersebut kita tambahkan scribt Passport::routes() pada fungsi boot() seperti pada scribt di bawah ini :

<?php

namespace App\Providers;

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

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [ 
        'AppModel' => 'AppPoliciesModelPolicy', 
    ];

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

Mengedit file config/auth.php

Tujuan pengeditan file ini adalah untuk menginstruksikan kepada project laravel yang akan kita jadikan Rest Server ini untuk menggunakan Passport ketika mengautentikasi permintaan atau request API dari Client. Untuk melakukan hal tersebut kita tinggal merubah driver pada api menjadi passport seperti pada scribt dibawah ini :

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

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

Membuat Routes Api

Secara default pada laravel sendiri telah menyediakan route khusus untuk melayani prefix dari Api yaitu pada file routes/api.php. Namun pada tutorial kali ini saya akan mengelompokkan Api yang kita buat kali ini kedalam Prefix V1 sehingga ketika diakses nanti user harus melakukan request ke url api/V1/ {nama path yang ingin diakses}. Berikut ini adalah scribtnya :

<?php
Route::prefix('v1')->group(function(){
    Route::post('register','Api\V1\AuthController@register');
    Route::post('login','Api\V1\AuthController@login');
    Route::group(['middleware' => 'auth:api'], function(){
        Route::get('logout','Api\V1\AuthController@logout');
    });
});

Membuat Controller Api

Pada langkah yang terakhir ini kita akan membuat sebuah controller yang akan digunakan sebagai logic dari Aplikasi yang akan kita buat. Pada controller ini kita membuat 3 buah fungsi masing-masing untuk menangani user register, user login serta user logout. Untuk membuat controller kita dapat mengetikkan perintah berikut :

php artisan make:controller Api/V1/AuthController

Kemudian edit isinya menjadi seperti berikut :

<?php

namespace App\Http\Controllers\Api\V1;
use App\User;
use Validator;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    /**
     * @register function
     * body: id,username,email,password,re_password,role
     * response: username,token
     */
    public function register(Request $request){
        //validasi
        $validator = Validator::make($request->all(),[
            'id'       => 'required|unique:users',
            'username' => 'required',
            'email'    => 'required|email|unique:users',
            'password' => 'required|min:8',
            're_password' => 'required|same:password',
        ]);
        if ($validator->fails()){
            return response()->json(['error'=>$validator->errors()],401);
        }
        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        //input data user ke database
        $user = User::create($input);
        //membuat token
       
        $success['token'] =  $user->createToken('Personal Access Token')->accessToken;
        $success['username']  = $user->name;

        return response()->json(['success'=>$success],200); 
    }
    /**
     * @ login function
     * body: username,password
     * 
     */
    public function login(Request $request){
        $validator = Validator::make($request->all(),[
            'username' => 'required',
            'password' => 'required',
        ]);
        
        if(Auth::attempt(['username' => $request->username, 'password' => $request->password])){
            $user = Auth::user();
            $tokenResult =  $user->createToken('Personal Access Token');
            $token = $tokenResult->token;
            if($request->remember_me){
                $token->expires_at = Carbon::now()->addWeeks(1);
            }
            $token->save();

            return response()->json([
                'access_token'=>$tokenResult->accessToken,
                'token_type' => 'Bearer', 
                'expires_at' => Carbon::parse($tokenResult->token->expires_at)->toDateTimeString()
            ]);
        }else{
            return response()->json(['error'=>'Unauthorized'],401);
        }
    }

    /**
     * @ logout function
     */
    public function logout(Request $request){
        $request->user()->token()->revoke();
        return response()->json(['massage'=>'sucessfully logout'],200);
    }
}

Kita jalankan server laravel kita dengan menggunakan perintah :

php artisan serve

Terakhir kita akan melakukan testing dari Rest API yang telah kita buat. Pada tutorial ini saya menggunakan Postman untuk melakukan tessting dan berikut adalah hasilnya :

Rest API Register

Rest API Register

Rest API Login

Rest API Login

Rest API Logout

Belajar Laravel Passport Untuk Membuat Rest Api Laravel

Kita pun telah berhasil belajar cara menggunakan laravel passport untuk membuat Rest Api Login , Register serta Logout . Sekian atikel saya kali ini jangan lupa baca artikel saya yang lain tentang Cara membuat pagination pada Php dan Mysql

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *