
Hai Sobat BWA!🙌
Seperti yang kita tau, Laravel merupakan salah satu framework PHP yang populer hingga saat ini. Dengan banyaknya fitur yang dimilikinya, dapat memudahkan kita untuk mengembangkan sebuah aplikasi website. Salah satu fitur yang dimiliki oleh Laravel adalah fitur autentikasi. Dan pada artikel kali ini, kita akan membahas tentang fitur autentikasi tersebut yaitu JWT atau Json Web Token.
Simak artikel ini sampai habis ya!
Pengenalan JWT
JWT atau Json Web Token adalah sebuah token yang digunakan untuk mengotentikasi permintaan API pada Laravel. Dengan menggunakan JWT, kita dapat membuat token yang akan digunakan oleh pengguna untuk mengakses API kita. Token ini akan berisi informasi yang dapat kita gunakan untuk mengidentifikasi pengguna dan mengizinkan akses ke sumber daya yang terproteksi.
JWT terdiri dari tiga bagian utama yaitu sebagai berikut:
1. Header
Bagian ini berisi informasi tentang jenis token dan algoritma yang digunakan.
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload
Payload berisi informasi tentang data yang ingin kita kirim dengan token. Contohnya seperti id user, role, expired date, dll.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
3. Verify Signature
Bagian ini digunakan untuk memverifikasi integritas data. Bagian ini adalah gabungan dari bagian header dan payload yang ditambahkan kode rahasianya.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Cara Menginstall JWT
1. Jalankan text editor dan buka folder Laravel yang akan di-install JWT
2. Pada command prompt, install JWT dengan mengetik perintah berikut:
composer require tymon/jwt-auth:dev-develop --prefer-source
3. Buka file config/app.php dan tambahkan kode berikut di dalam array providers
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
Lalu, tambahkan facades berikut ke dalam array aliases
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
4. Publish package JWT dengan menjalankan perintah berikut
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
5. Setelah selesai, jalankan perintah berikut
php artisan jwt:secret
Cara Implementasi JWT
1. Buka file User.php (app/User.php) dan tambahkan kode berikut:
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;
Dan kode berikut pada bagian bawah
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
2. Tambahkan method register pada class UserController.php
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);
}
3. Tambahkan method login pada class UserController.php
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'));
}
4. Tambahkan method getAuthenticatedUser
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'));
return response()->json([
'status' => 1,
'message' => 'Succes login!',
'data' => $user
]);
}
5. Membuat Route untuk Autentikasi API Pada command prompt, tambahkan perintah berikut membuat JWTMiddleware yang akan melindungi route API dari akses yang tidak terautentikasi
php artisan make:middleware JwtMiddleware
6. Buka file JwtMiddleware.php (app/Http/Middleware/JwtMiddleware.php). Ubah barisan kode menjadi seperti berikut:
<?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);
}
}
7. Buka Kernel.php (app/Http/Kernel.php) dan tambahkan baris kode berikut di array routeMiddleWare
'jwt.verify' => \App\Http\Middleware\JwtMiddleware::class,
8. Buka api.php, kemudian modifikasi isinya menjadi seperti berikut
<?php
use Illuminate\Http\Request;
Route::post('/register', 'UserController@register');
Route::post('/login', 'UserController@login');
Route::group(['middleware' => ['jwt.verify']], function ()
{
Route::get('/kelas', 'KelasController@show'); //contoh
Route::post('/kelas', 'KelasController@store');
});
Kesimpulan
Nah, itulah ‘Cara Install dan Implementasi JWT pada Laravel’. Setelah meng-install dan mengimplementasi JWT, kalian bisa mencoba API yang kalian buat dengan aplikasi Postman. Dengan menggunakan JWT, kita dapat membuat token yang akan digunakan oleh pengguna untuk mengakses API kita. Token ini akan berisi informasi yang dapat kita gunakan untuk mengidentifikasi pengguna dan mengizinkan akses ke sumber daya yang terproteksi.
Eitss, bagi kalian yang tertarik untuk mempelajari tentang JWT pada Laravel, kalian bisa mempelajarinya secara gratis melalui BuildWithAngga loh! Jangan lupa kepoin kelas-kelasnya ya! Sampai jumpa di artikel selanjutnya🙌