Odhlásenie a denylist
Podpísaný JWT platí až do expirácie, takže odhlásenie znamená zapísať jeho jti a odmietať ho po zvyšok platnosti:
use RoundlyConsulting\Jwt\Facades\Jwt;
Jwt::logout($issued); // from a freshly issued token
Jwt::denyClaims(Jwt::verify($jwt)); // or from verified claims (reads jti + exp)
// Power users not using the facade:
app(\RoundlyConsulting\Jwt\Denylist\Contracts\Denylist::class)->denyToken($issued);Typický endpoint na odhlásenie zaradí do denylistu token aktuálneho requestu:
Route::middleware('auth:api')->post('/logout', function () {
Jwt::denyClaims(Jwt::guard('api')->claims()); // throws ClaimMismatch if jti/exp are absent
return response()->noContent();
});Úložisko denylistu
Jwt::denylist() vracia kontrakt Denylist s implementáciou CacheDenylist:
Jwt::denylist()->deny($jti, $expiresAt); // CarbonImmutable $until
Jwt::denylist()->has($jti); // true- has(string $jti): bool — či je identifikátor tokenu práve zakázaný.
- deny(string $jti, CarbonImmutable $until): void — zakáže token do daného okamihu plus leeway overovača; token už po exp + leeway sa ignoruje.
- denyToken(IssuedToken $token): void — zakáže práve vydaný token až do jeho expiresAt.
Záznamy sa ukladajú do cache store jwt.denylist.store (predvolene redis) s prefixom jwt:denylist: a s TTL rovným zvyšnej platnosti tokenu plus jwt.leeway — overovač token prijíma až do exp + leeway, takže zákaz trvá presne rovnako dlho. Denylist tak neomedzene nerastie. Každé zakázanie spustí TokenDenied.
Ako to guard vynucuje
Guard jwt odmieta zakázané tokeny, kým je guard.check_denylist true. Kontrola je fail-closed: token bez jti sa v denyliste nedá vyhľadať, preto sa pri zapnutom denyliste nikdy neprihlási. Nastavením JWT_CHECK_DENYLIST=false kontrolu aj dotaz do cache úplne vypnete, prípadne ju prepnite pre konkrétny guard cez check_denylist. Prázdne JWT_CHECK_DENYLIST= sa počíta ako nenastavené, takže kontrola zostane zapnutá.
Na odhlásenie používateľa zo všetkých zariadení naraz radšej zvýšte verziu jeho tokenu — pozrite časť Guardy.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.