Aplikasi Laravel yang dibuat menggunakan metode autentikasi akan membatasi halaman tertentu diakses oleh tamu atau pengunjung yang belum login ke aplikasi. Secara default, Laravel akan mengarahkan (redirect) ke halaman home setelah seorang pengguna berhasil melekukan autentikasi. Contoh skemanya seperti ini:
- Seseorang ingin mengunjungi halaman nusagates.co.id/profile namun karena dia belum login maka dialihkan secara otomatis ke halaman login.
- Setelah berhasil, Laravel akan otomatis mengalihkan orang tersebut ke halaman home.
Nah! Lalu bagaimana agar orang tersebut dialihkan ke halaman profil setelah berhasil melakukan login? Jawabannya cukup ringkas. Kita hanya perlu mengedit sebaris kode di Middleware.
Cara Mengubah Skema Pengalihan Halaman Setelah Login Laravel
Caranya adalah sebagai berikut:
- Edit file
/app/Http/Middleware/RedirectIfAuthenticated.php
- Ubah baris kode
return redirect(RouteServiceProvider::HOME);
menjadi returnredirect()->intended(RouteServiceProvider::HOME);
Perubahan kode di atas dibutuhkan untuk Laravel versi 5.3 ke atas yang akan menyimpan last intended url ketika pengecekan Auth Guard.
Contoh Kode Lengkap Middleware Laravel RedirectIfAuthenticated.php
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @param string|null ...$guards
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next, ...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect()->intended(RouteServiceProvider::HOME);
}
}
return $next($request);
}
}