NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
JWT for Laravel

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 kryptomien

Odoslaní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.