Tutorial Laravel 9 - Part #15 - Pengecekan Autentikasi User

Hi Semua, Sebelumnya kita telah membahas tentang bagaimana membuat login user di Laravel 9. Dan pada kesempatan kali ini kita akan membahas bagaimana memanfaatkan fitur login user tersebut untuk memproteksi suatu halaman ataupun infomasi dari akses user yang tidak login.

Pengecekan Login User di Blade

Pengecekan login user di Blade view biasanya digunakan untuk menampilkan/menyembunyikan informasi. Case yang sering ditemui contohnya adalah:

Ketika user belum login maka tampikan link Login dan Register, sebaliknya Ketika user sudah login maka tampilkan link My Account dan Logout

Dengan case di atas kita dapat melakukan pengecekan Login User pada Blade seperti berikut:

<ul class="navbar-nav ms-auto">
    <!-- Authentication Links -->
    @guest
        @if (Route::has('login'))
            <li class="nav-item">
                <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
            </li>
        @endif

        @if (Route::has('register'))
            <li class="nav-item">
                <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
            </li>
        @endif
    @else
        <li class="nav-item dropdown">
            <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
                {{ Auth::user()->name }}
            </a>

            <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
                <a class="dropdown-item" href="{{ route('logout') }}"
                    onclick="event.preventDefault();
                                    document.getElementById('logout-form').submit();">
                    {{ __('Logout') }}
                </a>

                <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
                    @csrf
                </form>
            </div>
        </li>
    @endguest
</ul>

Pengecekan Login User di Controller

Dalam sebuah controller bisa saja terdapat method yang dapat diakses tanpa login ataupun diharuskan login terlebih dahulu. Misal kita mempunyai controller ProductController yang di dalamnya terdapat method: index, show, create, edit, dan delete. Method index dan show dapat diakses tanpa login (public) sedangkan method create, edit dan delete dapat diakses dengan login terlebih dahulu. Sehingga pengecekan login user di controller kurang lebih menjadi seperti berikut:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;

class ProductController extends Controller
{
    public function index()
    {
        //
    }

    public function create()
    {
        if (Auth::check()) {
            // The user is logged in...
        }
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        if (Auth::check()) {
            // The user is logged in...
        }
    }

    public function delete($id)
    {
        if (Auth::check()) {
            // The user is logged in...
        }
    }
}

Meski cara ini memungkinkan di Laravel, tetapi kita lebih disarankan untuk melakukan pengecekan user di Route dengan Middleware seperti yang akan dibahas di bawah ini.

Pengecekan Login User di Route dengan Middleware

Laravel memberikan kemudahan pengecekan login user dengan middleware auth yang merupakan representasi dari class Illuminate\Auth\Middleware\Authenticate. Kita dapat menggunakan middleware ini pada routing (routes/web.php) yang kita buat, contohnya adalah seperti berikut:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;


Route::get('/products', [ProductController::class, 'index']);
Route::get('/products/{id}', [ProductController::class, 'show']);
Route::get('/products/create', [ProductController::class, 'create'])->middleware('auth');
Route::get('/products/{id}/edit', [ProductController::class, 'edit'])->middleware('auth');
Route::delete('/products/{id}', [ProductController::class, 'delete'])->middleware('auth');

Selamat mencoba!

Tulis Komentar