Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token
Pada panduan ini kali, kita akan belajar bagaimanakah cara membuat autentikasi api di laravel memakai Json Situs Token. Keterangan secara singkat ialah tiap kita lakukan Request, kita harus mempunyai token supaya bisa mengaksesnya. Langsung seperti umumnya, kerjakan instalasi laravel dengan menulis perintah
$ composer create-project — prefer-dist laravel/laravel NamaProject
Lalu janganlah lupa setting.env sesuai settingan database kalian.
Sesudah install JWT Packagenya dengan menulis perintah
$ composer require tymon/jwt-auth:dev-develop --prefer-source
Lalu buka config/app.php
Pada bagian Provider tambah 1 baris kode semacam ini
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
Di Bagian Aliases tambah 2 baris kode semacam ini
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
Kemudian publish JWT Packagenya dengan menulis perintah
$ php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Lalu buat jwt-auth secretnya dengan menulis perintah
$ php artisan jwt:secret
Kemudian buka file Mode Pemakai, lokasi filenya berada di app/Pemakai.php buatlah semacam ini
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
use 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',
];
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
Kemudian, tuliskan perintah migrasi database untuk membuat tabel dengan perintah
$ php artisan migrate
Lalu buat UserController untuk membuat fungsi registrasi dan login, dengan menulis perintah
$ php artisan make:controller UserController
Kemudian membuka UserController pada bagian folder app/Http/Controller/UserController.php dan membuka isi isi controller semacam ini
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
class UserController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
try {
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 400);
}
} catch (JWTException $e) {
return response()->json(['error' => 'could_not_create_token'], 500);
}
return response()->json(compact('token'));
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
if($validator->fails()){
return response()->json($validator->errors()->toJson(), 400);
}
$user = User::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => Hash::make($request->get('password')),
]);
$token = JWTAuth::fromUser($user);
return response()->json(compact('user','token'),201);
}
public function getAuthenticatedUser()
{
try {
if (! $user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent'], $e->getStatusCode());
}
return response()->json(compact('user'));
}
}
Kemudian buat BookController untuk memeriksa menerapkan JWT Auth yang kita buat barusan dengan menulis perintah
$ php artisan make:controller BookController
Kemudian isi BookControllernya di folder app/Http/Controller/BookController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
class BookController extends Controller
{
public function book() {
$data = "Data All Book";
return response()->json($data, 200);
}
public function bookAuth() {
$data = "Welcome " . Auth::user()->name;
return response()->json($data, 200);
}
}
Kemudian buat JwtMiddleware dengan menulis perintah
$ php artisan make:middleware JwtMiddleware
Kemudian ubah app/Http/Middleware/JwtMiddleware.php berikut di bawah ini
<?php
namespace App\Http\Middleware;
use Closure;
use JWTAuth;
use Exception;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
class JwtMiddleware extends BaseMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
try {
$user = JWTAuth::parseToken()->authenticate();
} catch (Exception $e) {
if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){
return response()->json(['status' => 'Token is Invalid']);
}else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){
return response()->json(['status' => 'Token is Expired']);
}else{
return response()->json(['status' => 'Authorization Token not found']);
}
}
return $next($request);
}
}
Kemudian ubah Kernel.php di app/http/Kernel.php pada bagian $routeMiddleware tambah sebaris kode berikut
'jwt.verify' => \App\Http\Middleware\JwtMiddleware::class,
Lalu buat routing di routes/api.php
Route::post('register', 'UserController@register');
Route::post('login', 'UserController@login');
Route::get('book', 'BookController@book');
Route::get('bookall', 'BookController@bookAuth')->middleware('jwt.verify');
Route::get('user', 'UserController@getAuthenticatedUser')->middleware('jwt.verify')
Kemudian ketik perintah
$ php artisan serve
Lalu check di postman
Membuka 2 link berikut dengan postman (tidak boleh lakukan login terlebih dulu)
localhost:8000/api/book
localhost:8000/api/bookall
Kemudian lakukan registrasi dan login untuk mencoba akses localhost:8000/api/bookall dengan link registrasi localhost:8000/api/register
Sesudah register coba lakukan login dengan e-mail dan sandi yang telah di daftarkan dengan link localhost:8000/api/login, kemudian kita akan mendapatkan token, token itu akan kita gunakan untuk mengakses localhost:8000/api/bookall
Kemudian coba akses localhost:8000/api/bookall dengan menambah Bearer dan token dalam header. Copy token yang diperoleh saat lakukan login
Coba untuk mengakses localhost:8000/api/user untuk memperoleh data informasi user yang login
Demikian panduan dari saya, mudah-mudahan berguna apabila ada salah tolong di betulkan di komentar. Terimakasih~
Artikel Terkait Lainnya :
- Cara Membuat Service Provider, Contract, Services, Facades, Service Container Pada Laravel
- Konfigurasi Background Service Untuk Laravel Framework Di Windows
- Integrasi Laravel Dengan Stripe Payment Gateway
- Membuat Service Layer Di Laravel Untuk Pemula
- Jangan Menggunakan Yajra Ketika Implementasi Server Side Datatable Pada Laravel Framework