API Otentikasi Menggunakan Passport Laravel

API Otentikasi Menggunakan Passport Laravel

Pada kesempatan kali ini kita akan membahas tentang cara membuat API otentikasi menggunakan passport di Laravel. API atau sering juga dikatakan sebagai Web Service digunakan untuk berkomunikasi antar aplikasi, dan biasanya banyak digunakan untuk keperluan develop aplikasi mobile. Laravel cukup populer karena kemudahannya dalam membuat API. Adapun poin yang akan kita capai dalam pembelajaran kali ini adalah:

  1. Membuat API Login

  2. Membuat API Register

  3. Menampilkan Data

Tapi poin yang tak kalah penting adalah membuat anda mengetahui apa itu API dan bagaimana cara membuatnya.

Membuat API & Menampilkan Data

Best practice dalam belajar pemrograman adalah dengan mencoba menyelesaikan kasus yang berkaitan dengan topik yang akan kita pelajari, maka kali ini kita akan coba membuat simple API otentikasi. Laravel memperkenalkan package Passport untuk membuat API otentikasi. Passport package memungkinkan anda membuat otentikasi menggunakan OAuth2, JWT, etc. Pada contoh kali ini kita akan menggunakan passport package untuk membuat API otentikasi user. Install Laravel terlebih dahulu, pada tutorial kali ini saya menggunakan Laravel 5.4:

composer create-project --prefer-dist laravel/laravel api "5.4.*"

Selanjutnya anda harus menginstall Passport package, jalankan command berikut:

composer require laravel/passport

Setelah package berhasil di install, buka file config/app.php dan tambahkan potongan code berikut pada bagian providers:

Laravel\Passport\PassportServiceProvider::class,

Kemudian lalukan migrate dengan command:

php artisan migrate

Pastikan sebelum melakukan migrate, informasi database anda telah di perbaharui pada file .env. Kemudian gunakan command passport:install untuk membuat token keys .

php artisan passport:install

Setelah token keys berhasil digenerate, hal yang perlu kita lakukan selanjutnya adalah konfigurasi pada beberapa bagian: model, service provider dan auth config. Mari kita lakukan satu persatu secara berurutan:

app/User.php

<?php

namespace App;

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

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

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

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

app/Providers/AuthServiceProvider.php

<?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 = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

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

config/auth.php

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

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

Langkah persiapan untuk membuat API telah selesai, selanjutnya adalah membuat route. Secara default Laravel telah menyediakan route khusus untuk api yang dapat ditemukan pada direktori: routes/api.php. Tambakan potongan kode berikut:

Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');

Route::group(['middleware' => 'auth:api'], function(){
	Route::post('details', 'API\UserController@details');
});

Lalu buat UserController.php yang akan diletakkan keadalam folder: API. Jalankan command berikut:

php artisan make:controller API/UserController

Buka file app/Http/Controllers/API/UserController.php, kemudian tambahkan code berikut:

<?php

namespace App\Http\Controllers\API;

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

class UserController extends Controller
{

    public $successStatus = 200;

    public function login(){
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
            $user = Auth::user();
            $success['token'] =  $user->createToken('nApp')->accessToken;
            return response()->json(['success' => $success], $this->successStatus);
        }
        else{
            return response()->json(['error'=>'Unauthorised'], 401);
        }
    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'email' => 'required|email',
            'password' => 'required',
            'c_password' => 'required|same:password',
        ]);

        if ($validator->fails()) {
            return response()->json(['error'=>$validator->errors()], 401);            
        }

        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        $user = User::create($input);
        $success['token'] =  $user->createToken('nApp')->accessToken;
        $success['name'] =  $user->name;

        return response()->json(['success'=>$success], $this->successStatus);
    }

    public function details()
    {
        $user = Auth::user();
        return response()->json(['success' => $user], $this->successStatus);
    }
}

 

Sampai disini API yang telah kita buat sudah bisa digunakan, silahkan jalankan command:

php artisan serve

Untuk proses testing, saya menggunakan Postman.

API Login

API Register

API Details

Category:
Share:

Comments