Seri artikel RESTful API pada Mircro Framework Lumen 7.x
Postingan lainnya
Membuat API Login dan Mengimplementasikan User Token untuk Melindungi API Produk
Selanjutnya mari kita membuat API digunakan oleh user untuk login dan kita juga akan memberikan token yang akan digunakan oleh user untuk mengakses AP...
Selanjutnya mari kita membuat API digunakan oleh user untuk login dan kita juga akan memberikan token yang akan digunakan oleh user untuk mengakses API yang kita miliki.
Mari kita buat method login pada file UserController.php
public function login(Request $request)
{
$this->validate($request,[
'email' => 'required|email',
'password' => 'required|min:5'
]);
$email = $request->input('email');
$password = $request->input('password');
$user = User::where('email', $email)->first();
if(!$user) {
return response()->json(['message' => 'Gagal Masuk'],401);
}
$isValidPassword = Hash::check($password, $user->password);
if(!$isValidPassword) {
return response()->json(['message' => 'Gagal Masuk'],401);
}
$generateToken = bin2hex(random_bytes(40));
$user->update([
'token' => $generateToken
]);
return response()->json($user);
}
Setelah itu kita akan mendaftarkan route nya pada file web.php
$router->post('/login', 'UserController@login');
Mari kita coba API login tersebut menggunakan POSTMAN
Dan akhirnya berhasil, kita dapat melihat ada data token disana, token ini lah yang akan dibawa terus oleh user untuk dapat mengakses API yang ada.
Mengimplementasikan Token
Setelah kita selesai membuat semua API yang kita butuhkan dan kita juga sudah mengenerate token yang akan digunakan oleh user, kini saatnya kita akan mengimplementasikannya.
Hal yang perlu kita lakukan pertama sekali adalah meng-uncomment middleware authenticate yagn terdapat pada App/bootstrap/app.php
$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
]);
Silahkan teman-teman lihat file Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
if ($this->auth->guard($guard)->guest()) {
return response('Unauthorized.', 401);
}
return $next($request);
}
Terdapat method handle disana, apa sih method handle itu? jadi sederhana nya teman-teman setiap request seperti GET, POST dll akan melewati middleware ini terlebih dahulu, dan jika token yang dibawa oleh user tidak valid maka dia akan memberikan response Unauthorized dengan htpp response code nya 401, lalu bagaimana jika ingin mengimplementasikan nya ? Silahkan teman-teman tambahkan kode berikut pada file ProdukController.php
public function __construct()
{
$this->middleware('auth');
}
Lalu silahkan akses http://localhost:8000/produk untuk menampilkan semua produk menggunakan POSTMAN dengan menthod GET
Maka akan menampilkan response Unauthorized
Mari kita buka file app/Providers/AuthServiceProvider.php
Nah teman-teman inti dari authentikasi yang kita buat terdapat pada method boot ini, saya akan tunjukan kepada teman-teman semua
Coba kita ubah sedikit isi dari method boot menjadi seperti ini
<?php
namespace App\Providers;
use App\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Boot the authentication services for the application.
*
* @return void
*/
public function boot()
{
// Here you may define how you wish users to be authenticated for your Lumen
// application. The callback which receives the incoming request instance
// should return either a User instance or null. You're free to obtain
// the User instance via an API token or any other method necessary.
$this->app['auth']->viaRequest('api', function ($request) {
$token = $request->header('token');
if ($token === 'tokenapi'){
return new User();
}
});
}
}
Disini saya men-set token nya adalah ‘tokenapi’ , teman-teman silahkan tambahkan token pada header di POSTMAN dengan value nya adalah ‘tokenapi’, lalu coba akses salah satu API yang sudah kita buat
Dan hasilnya adalah
Kita berhasil mengakses dan mendapatkan data dari API tersebut, nah sekarang tugas kita adalah mengganti token yang semula adalah ‘tokenapi’ yang masih statis kita tetapkan menjadi token yang didapatkan oleh user pada saat login.
Silahkan ubah kode pada method boot tersebut menjadi seperti dibawah ini
<?php
namespace App\Providers;
use App\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Boot the authentication services for the application.
*
* @return void
*/
public function boot()
{
// Here you may define how you wish users to be authenticated for your Lumen
// application. The callback which receives the incoming request instance
// should return either a User instance or null. You're free to obtain
// the User instance via an API token or any other method necessary.
$this->app['auth']->viaRequest('api', function ($request) {
$token = $request->header('token');
if ($request->header('token')) {
return User::where('token', $token)->first();
}
});
}
}
Mari kita coba menggunakan POSTMAN
Pada saat user login maka token akan tergenerate, token ini akan digunakan oleh user untuk dapat mengakses API yang ada, kita akan meletakan token ini pada header.
> Perlu di ingat bahwa token ini akan terus berubah, setiap kali user login maka secara otomatis token juga akan tergenerate
Mari kita coba menggunakan POSTMAN, silahkan isi key dan value pada headers seperti dibawah ini
Selanjutnya tekan tombol send
Dan berhasil, kita dapat mengakses API yang menampilkan semua data produk.
Akhirnya seri belajar Mengimplementasikan RESTful API Pada Micro Framework Lumen 7.x telah selesai. Semoga bermanfaat, terimakasih
Bagian dari artikel seri
Belum ada Jawaban. Jadi yang pertama Jawaban
Login untuk ikut Jawaban