32 lines
760 B
PHP
32 lines
760 B
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Models\Concerns;
|
||
|
|
|
||
|
|
use Illuminate\Support\Str;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Une seule session active par compte (étape 8) : la précédente est coupée
|
||
|
|
* et son porteur en est averti à sa prochaine requête (voir
|
||
|
|
* App\Http\Middleware\VerifieSessionUnique).
|
||
|
|
*/
|
||
|
|
trait GereSessionUnique
|
||
|
|
{
|
||
|
|
public function demarreNouvelleSession(): string
|
||
|
|
{
|
||
|
|
$jeton = Str::random(40);
|
||
|
|
$this->forceFill(['jeton_session_actif' => $jeton])->save();
|
||
|
|
|
||
|
|
return $jeton;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function sessionEstEncoreValide(?string $jeton): bool
|
||
|
|
{
|
||
|
|
return $jeton !== null && $jeton === $this->jeton_session_actif;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function terminerSession(): void
|
||
|
|
{
|
||
|
|
$this->forceFill(['jeton_session_actif' => null])->save();
|
||
|
|
}
|
||
|
|
}
|