Home Mobile Bagaimana sih cara menggunakan Auth Sanctum di laravel 11?

Bagaimana sih cara menggunakan Auth Sanctum di laravel 11?

0

Laravel Sanctum

Laravel Sanctum adalah salah satu paket resmi dari Laravel yang dirancang untuk mempermudah pengembang aplikasi mobile dan frontend-JS dalam membuat autentikasi pada aplikasi. Sanctum berbasis token dan memungkinkan setiap pengguna memiliki beberapa token yang dapat memiliki berbagai tingkat akses yang berbeda.

Prosesnya dimulai dengan aplikasi yang mengirimkan username dan password ke backend untuk login. Backend kemudian mengirimkan kembali token sebagai respons. Selanjutnya, aplikasi dapat menggunakan token ini untuk mengajukan permintaan ke server guna mengakses data. Akses data ini dibatasi sesuai dengan hak akses yang diberikan oleh token tersebut.

Cara Instal laravel sanctum di laravel 11

Berikut adalah langkah-langkah lengkap untuk menginstal Laravel Sanctum di Laravel 11 dan memastikan bahwa route API telah diinstal terlebih dahulu:

Langkah 1: Instal Route API Laravel

Buka terminal atau command prompt dan navigasikan ke direktori root project Laravel Anda.

php artisan install:api`

Perintah ini akan melakukan beberapa hal:

  • Menginstal package Laravel Sanctum dan beberapa dependensi lainnya.
  • Memublikasikan konfigurasi Sanctum dan CORS.
  • Membuat file migrasi untuk tabel Sanctum.
  • Menambahkan middleware Sanctum ke kernel aplikasi.
  • Membuat file route API (api.php).

Jalankan migrasi database untuk membuat tabel Sanctum.

php artisan migrate

Langkah 2: Mengaktifkan Token API untuk Pengguna

Tambahkan trait HasApiTokens ke model User Anda untuk memungkinkan pengguna membuat token API secara otomatis

use Laravel\Sanctum\HasApiTokens;
 
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

Langkah 3: publikasi konfigurasi sanctum

masukan konfigurasi sanctum

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

Langkah 4: setting bagian pada config/sanctum.php dan config/auth.php

config/sanctum.php

<?php

use Laravel\Sanctum\Sanctum;

return [

    /*
    |--------------------------------------------------------------------------
    | Stateful Domains
    |--------------------------------------------------------------------------
    |
    | Requests from the following domains / hosts will receive stateful API
    | authentication cookies. Typically, these should include your local
    | and production domains which access your API via a frontend SPA.
    |
    */

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        Sanctum::currentApplicationUrlWithPort()
    ))),

    /*
    |--------------------------------------------------------------------------
    | Sanctum Guards
    |--------------------------------------------------------------------------
    |
    | This array contains the authentication guards that will be checked when
    | Sanctum is trying to authenticate a request. If none of these guards
    | are able to authenticate the request, Sanctum will use the bearer
    | token that's present on an incoming request for authentication.
    |
    */

    'guard' => 'web',

    /*
    |--------------------------------------------------------------------------
    | Expiration Minutes
    |--------------------------------------------------------------------------
    |
    | This value controls the number of minutes until an issued token will be
    | considered expired. This will override any values set in the token's
    | "expires_at" attribute, but first-party sessions are not affected.
    |
    */

    'expiration' => null,

    /*
    |--------------------------------------------------------------------------
    | Token Prefix
    |--------------------------------------------------------------------------
    |
    | Sanctum can prefix new tokens in order to take advantage of numerous
    | security scanning initiatives maintained by open source platforms
    | that notify developers if they commit tokens into repositories.
    |
    | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
    |
    */

    'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),

    /*
    |--------------------------------------------------------------------------
    | Sanctum Middleware
    |--------------------------------------------------------------------------
    |
    | When authenticating your first-party SPA with Sanctum you may need to
    | customize some of the middleware Sanctum uses while processing the
    | request. You may change the middleware listed below as required.
    |
    */

    'middleware' => [
        'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
        'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
        'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
    ],

];

config/auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
        ],
    ],

Langkah 5: membuat controller untuk user

<?php

namespace App\Services\Auth;

use App\Models\User;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;

class LoginService
{
    public function login($request)
    {
        $user = User::where('email', $request->email)->first();

        if (!$user || !Hash::check($request->password, $user->password)) {
            throw ValidationException::withMessages([
                'email' => ['The provided credentials are incorrect.'],
            ]);
        }

        $token = $user->createToken('API')->plainTextToken;

        return response()->json([
            'token' => $token,
            'data'  => $user,
        ], 200);   
    }


   public function __construct()
    {
        auth()->setDefaultDriver('api');
    }

    public function logout()
    {
        try {
            $user = Auth::user();
            if (!$user) return $this->error('User not authenticated', 401);
    
            $user->tokens()->delete();

            return $this->success(null, "User Logged Out Successfully");
        } catch (\Throwable $th) {
            Log::error([
                'Message' . $th->getMessage(),
                'On Line' . $th->getLine(),
                'On File' . $th->getFile(),
            ]);

            return $this->error($th->getMessage());
        }
    }
}

Langkah 6: route api

use App\Http\Controllers\API\Auth\LoginController;

Route::post('/login', [LoginController::class, 'login']);

Route::group([
    'middleware' => ['auth:sanctum']
], function () {

    Route::post('/logout', [LoginController::class, 'logout']);
});

Langkah 7: testing

Penjelasan Lebih Lanjut:

  • Laravel Sanctum adalah solusi autentikasi token API bawaan Laravel yang dirancang untuk aplikasi web modern dan SPA (Single-Page Applications).
  • Token API adalah string unik yang digunakan untuk mengidentifikasi dan memberi otorisasi pengguna untuk mengakses API Anda.
  • Trait HasApiTokens memungkinkan model User Anda untuk membuat dan mengelola token API.
  • Middleware Sanctum memvalidasi token API dan membatasi akses ke rute yang dilindungi.

Dengan mengikuti langkah-langkah di atas, Anda seharusnya sudah berhasil menginstal dan mengkonfigurasi Laravel Sanctum di Laravel 11.