37 lines
1.2 KiB
PHP
37 lines
1.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Middleware;
|
||
|
|
|
||
|
|
use Closure;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Illuminate\Support\Facades\Auth;
|
||
|
|
use Symfony\Component\HttpFoundation\Response;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Une seule session active par compte (étape 8). Si le jeton que porte cette
|
||
|
|
* session ne correspond plus à celui enregistré sur le compte, c'est qu'une
|
||
|
|
* connexion plus récente a eu lieu ailleurs : on déconnecte et on le dit.
|
||
|
|
*/
|
||
|
|
class VerifieSessionUnique
|
||
|
|
{
|
||
|
|
public function handle(Request $request, Closure $next, string $garde = 'web'): Response
|
||
|
|
{
|
||
|
|
$utilisateur = Auth::guard($garde)->user();
|
||
|
|
|
||
|
|
if ($utilisateur !== null) {
|
||
|
|
$cleSession = "jeton_session_{$garde}";
|
||
|
|
|
||
|
|
if (! $utilisateur->sessionEstEncoreValide($request->session()->get($cleSession))) {
|
||
|
|
Auth::guard($garde)->logout();
|
||
|
|
$request->session()->invalidate();
|
||
|
|
$request->session()->regenerateToken();
|
||
|
|
|
||
|
|
return redirect()->route('login')
|
||
|
|
->with('session_coupee', 'Vous avez été déconnecté : une nouvelle connexion a eu lieu sur votre compte.');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return $next($request);
|
||
|
|
}
|
||
|
|
}
|