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