Files
aplikasi-ketertiban/app/Http/Middleware/SingleSession.php
T
Novy San87 e815bd28d5 Admin dikecualikan dari aturan 1 akun 1 sesi
- LoginController: admin tidak ditolak saat login kedua (multi-sesi boleh)
- Middleware SingleSession: admin tidak ditendang walau sesi ≠ token aktif
- Alasan: admin terkunci = tidak ada yang bisa Paksa Logout akun lain
- 2 test baru (login kedua admin diterima; middleware tidak menendang admin)
2026-08-03 14:13:09 +07:00

48 lines
1.3 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Symfony\Component\HttpFoundation\Response;
/**
* Satu akun = satu sesi aktif.
*
* Jika user sudah login di perangkat lain (active_session_token berbeda),
* sesi ini dianggap tidak sah → logout otomatis + arahkan ke halaman login.
*/
class SingleSession
{
public function handle(Request $request, Closure $next): Response
{
$user = Auth::user();
if (! $user) {
return $next($request);
}
// Admin dikecualikan dari aturan satu-sesi — boleh login di banyak
// perangkat sekaligus (pengaman: admin tidak boleh ikut terkunci).
if ($user->isAdmin()) {
return $next($request);
}
$token = $user->active_session_token;
if ($token && $token !== Session::getId()) {
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('login')
->withErrors(['username' => 'Sesi berakhir: akun ini sedang digunakan di perangkat lain.'])
->onlyInput('username');
}
return $next($request);
}
}