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 :
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 Login
Rest API Logout
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
sangat membantu sekali mas, terimakasih
sangat membantu sekali mas, terimakasih