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:
-
Membuat API Login
-
Membuat API Register
-
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
Comments