Laravel 8 Rest API Authentication with Sanctum - Use GNU/Linux


Assalamualaikum Wr.Wb..
dengan diberikan nikmat dan rezeki dari Allah SWT, saya Mr.Gagaltotal666 akan
berbagi kepada anda yaitu tentang Laravel 8 Rest API Authentication
with Sanctum - Use GNU/Linux.

apa itu API ?
mungkin anda semua sudah mengetahui API itu apa....
sebagai di bidang software engineer pasti tau lah yak..

oke lanjut

Laravel sanctum menyediakan featherweight authentication system
untuk Single Page Application (SPA), mobile application
dan API berbasis token yang sederhana. 

Sanctum memungkinkan setiap pengguna aplikasi menghasilkan
beberapa token API untuk akun mereka. Token ini dapat diberikan
kemampuan atau cangkupan yang menentukan tindakan mana
yang diizinkan untuk dilakukan oleh token.

siapkan project baru atau jika kamu sudah ada project laravel nya
juga tidak masalah, oke sebagai berikut install via composer

$ composer create-project laravel/laravel laravel8-sanctum

Pada langkah yang pertama ini, kita perlu menginstall laravel
untuk versi nya itu tergantung PHP yang kamu install,
contoh php 7.4 untuk versi laravel nya 8 dan untuk php versi 8
di laravel versi 9 (saat ini versi 9), akan kita coba untuk implementasi
membuat REST API authentication menggunakan sanctum.
Untuk installasi laravel bisa menggunakan composer seperti contoh di atas.

Tunggu hingga proses installasi selesai dan jika sudah selesai,
jangan lupa untuk masuk ke direktori project
menggunakan perintah cd laravel8-sanctum.

Langkah ke 2 : Setup Database, di .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_api_sanctum
DB_USERNAME=root
DB_PASSWORD=root

Selanjutnya, buat database baru untuk percobaan membuat
REST API authentication di laravel menggunakan sanctum.
sebagai local development, silahkan buat database baru
di localhost/phpmyadmin. Disini saya beri contoh,
saya membuat database baru dengan nama laravel_api_sanctum

Kemudian jangan lupa juga untuk menyesuaikan
DB_DATABASE pada file .env seperti pada contoh di atas.


Langkah 3: Install package Sanctum menggunakan composer

$ composer require laravel/sanctum

Kita dapat menginstall sanctum melalui composer
package manager dengan perintah seperti di atas.


Selanjutnya, kita harus publish sanctum configuration
dan file migration menggunakan perintah artisan vendor:publish
atau seperti perintah di atas. File sanctum configuration
akan ditempatkan di direktori config.

$ php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Kemudian, kita harus menjalankan database migration.
Sanctum akan membuat satu table di database
untuk menyimpan token API.

$ php artisan migrate

Langkah 4: Buat AuthController

$ php artisan make:controller API/AuthController

Di langkah 4, kita buat file controller baru dengan nama AuthController
di dalam folder app/Http/Controllers/API menggunakan perintah
seperti di atas. File controller ini nantinya akan kita gunakan
untuk membuat logic authentication di laravel 8 menggunakan sanctum.

contoh logic authentication

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Validator;
use App\Models\User;

class AuthController extends Controller
{
//register auth token
public function register(Request $request)
{
$validator = Validator::make($request->all(),[
'name' => 'required|string|max:255',
'email' => 'required|string|max:255|email|unique:users',
'password' => 'required|string|max:8'
]);

if($validator->fails()){
return response()->json($validator->errors());
}

$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password)
]);

$token = $user->createToken('auth_token')->plainTextToken;
return response()->json([ 'data' => $user, 'access_token' => $token, 'token_type' => 'Bearer', ]);
}

//untuk login api
public function login(Request $request)
{
if(!Auth::attempt($request->only('email','password'))){
return response()->json([ 'message' => 'Unauthorized'], 401);
}

$user = User::where('email', $request['email'])->firstOrFail();
$token = $user->createToken('auth_token')->plainTextToken;

return response()
->json([ 'message' => 'HI '.$user->name.', selamat datang di rumah API ya', 'access_token' => $token, 'token_type' => 'Bearer', ]);
}

//untuk logout
public function logout()
{
auth()->user()->tokens()->delete();
return [
'message' => 'kamu telah berhasil logout ya'
];
}

}

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Validator;
use App\Models\User;

class AuthController extends Controller
{
    //register auth token
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'name'     => 'required|string|max:255',
            'email'    => 'required|string|max:255|email|unique:users',
            'password' => 'required|string|max:8'
        ]);

        if($validator->fails()){
            return response()->json($validator->errors());
        }

        $user = User::create([
            'name'     => $request->name,
            'email'    => $request->email,
            'password' => Hash::make($request->password)
        ]);

        $token = $user->createToken('auth_token')->plainTextToken;
        return response()->json([ 'data' => $user, 'access_token' => $token, 'token_type' => 'Bearer', ]); 
    }

    //untuk login api
    public function login(Request $request)
    {
       if(!Auth::attempt($request->only('email','password'))){
          return response()->json([ 'message' => 'Unauthorized'], 401);
       }

       $user = User::where('email', $request['email'])->firstOrFail();
       $token = $user->createToken('auth_token')->plainTextToken;

       return response()
            ->json([ 'message' => 'HI '.$user->name.', selamat datang di rumah API ya', 'access_token' => $token, 'token_type' => 'Bearer', ]);
    }

    //untuk logout
    public function logout()
    {
        auth()->user()->tokens()->delete();
        return [
            'message' => 'kamu telah berhasil logout ya'
        ];
    }

}

Di file AuthController.php ini, kita membuat
method register, login dan logout.

Penjelasan method-method tersebut :

Register. Di method ini, kita menambahkan validasi untuk name,
email dan password. Jika data POST request gagal divalidasi,
maka akan mengirimkan response error dari validasi tersebut.

Tapi, jika POST request berhasil divalidasi, maka data dari
POST request akan disimpan di table users dan akan membuat token baru,
serta akan mengirimkan response json yang berisikan detail
dari data yang telah ditambahkan beserta token yang telah berhasil dibuat.

Login. Di method ini, kita tambahkan logic untuk memeriksa
apakah email dan password yang diinput benar-benar cocok
dengan salah satu data di table users. Jika data gagal ditemukan
di tables users, maka response yang dihasilkan akan berstatus
401 atau Unauthorized. Tapi jika data tersebut berhasil ditemukan,
maka akan membuatkan token baru untuk user tersebut yang
akan disimpan di table personal_access_tokens.

Logout. Method ini akan menghapus user session dengan
menghapus semua token milik user tersebut di table personal_access_token.

Langkah 5: Define Route

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\API\AuthController;


/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

//api route untuk register
Route::post('/register', [AuthController::class, 'register']);
//api login
Route::post('/login', [AuthController::class, 'login']);

//protect route pake midlware
Route::group([ 'middleware' => ['auth:sanctum']], function() {
Route::get('/profile', function(Request $request){
return auth()->user();
});

//api route logout user
Route::post('/logout', [AuthController::class, 'logout']);
});

Selanjutnya, buka file routes/api.php dan tambahkan
kode route seperti di atas. Disini kita menambahkan
route baru yaitu register, login, profile dan logout.

Untuk route profile dan logout, kita menggunakan
sanctum authenticated guard ('middleware' => ['auth:sanctum']).
Artinya, kedua route tersebut hanya dapat diakses oleh pengguna
yang telah diautentikasi atau mengakses menggunakan token.

Langkah 6 : Testing API
Sekarang waktunya menguji REST API authentication
yang telah kita buang menggunakan laravel 8 dan sanctum.

$ php artisan serve

api register dengan port 8000


api login


api profile method get


api logout


oke mungkin itu saja mengenai Rest API laravel sanctum
jika anda kurang mengerti silakan nonton video tutorial dibawah ini


jika ada kesalahan dan kekurangan nya
mohon berikan masukan nya ya

sekian dan semoga bermanfaat...

Wasalamualaikum Wr.Wb...

sumber : [laravel doc] [codelapan]

Post a Comment

0 Comments