feat: implement gate authentication with login and logout functionality

This commit is contained in:
I-Fun
2026-04-03 11:12:10 +07:00
parent 3f18dbaadf
commit a0b294fa1c
8 changed files with 205 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class GateController extends Controller
{
public function login(): View
{
return view('gate.login');
}
public function attempt(Request $request): RedirectResponse
{
$request->validate([
'password' => 'required|string',
]);
$expected = config('app.password');
if (! $expected || $request->input('password') !== $expected) {
return back()->withErrors(['password' => 'Wrong password. Please try again.']);
}
// Store flag in session; expires with session lifetime (24 h in .env)
$request->session()->put('gate_authenticated', true);
$request->session()->regenerate();
return redirect()->intended(route('dashboard'));
}
public function logout(Request $request): RedirectResponse
{
$request->session()->forget('gate_authenticated');
$request->session()->regenerate();
return redirect()->route('gate.login');
}
}

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class GateAuth
{
public function handle(Request $request, Closure $next): Response
{
// Allow the login routes through without auth check
if ($request->routeIs('gate.login', 'gate.attempt', 'gate.logout')) {
return $next($request);
}
if (! $request->session()->get('gate_authenticated')) {
return redirect()->route('gate.login');
}
return $next($request);
}
}