Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token - CRUDPRO

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

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
Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

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

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

localhost:8000/api/bookall

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

Kemudian lakukan registrasi dan login untuk mencoba akses localhost:8000/api/bookall dengan link registrasi localhost:8000/api/register

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

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

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

Kemudian coba akses localhost:8000/api/bookall dengan menambah Bearer dan token dalam header. Copy token yang diperoleh saat lakukan login

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

Coba untuk mengakses localhost:8000/api/user untuk memperoleh data informasi user yang login

Membuat Autentikasi API Pada Laravel Menggunakan JSON Web Token

Demikian panduan dari saya, mudah-mudahan berguna apabila ada salah tolong di betulkan di komentar. Terimakasih~