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

Guardy deklarujte v config/auth.php — drivery dodáva balík:

'guards' => [
    // Claims mode: build a TokenUser straight from the token (no DB).
    'api' => ['driver' => 'jwt'],

    // Provider mode: resolve a real Eloquent user via `sub`.
    // 'api' => ['driver' => 'jwt', 'provider' => 'users'],

    'service' => ['driver' => 'service-jwt'],
],

Routy potom chránite ako zvyčajne:

Route::middleware('auth:api')->get('/me', fn () => ['id' => auth()->id()]);
Route::middleware('auth:service')->post('/internal/sync', SyncController::class);

V claims režime je request()->user() TokenUser — nie Eloquent model, preto vráťte polia, ktoré potrebujete (getAuthIdentifier(), claims()), a nie samotný objekt, z ktorého Laravel odpoveď nevytvorí.

Claims režim a provider režim

  • Claims režim — bez providera: guard zostaví guard.identity (predvolene TokenUser) priamo z overených claimov. Žiadny dotaz do databázy.
  • Provider režim — s providerom: guard zavolá retrieveById() s claimom sub, takže $request->user() je váš Eloquent model.
$user = $request->user();            // TokenUser in claims mode
$user->getAuthIdentifier();          // the 'sub' claim
$user->claims();                     // the full Claims bag
$user->hasPermission('posts.edit');  // membership in the 'permissions' claim

Spracovanie requestu

Pri každom requeste jwt guard prejde: bearer token → overenie (RS256, pripnutý iss, audience daného guardu) → povinný scope (predvolene access) → denylist → identita → voliteľná kontrola verzie tokenu. Akékoľvek zlyhanie vráti null používateľa — teda 401. Chýbajúci alebo neplatný RSA kľúč (KeyLoadFailed) sa naopak vyhodí ďalej, takže chyba v konfigurácii skončí ako 500. Guard nikdy nespúšťa TokenVerificationFailed; táto udalosť patrí len explicitnému Jwt::verify().

Čítanie aktuálnych claimov

Jwt::guard('api')->claims();       // ?Claims — that guard's verified claims, null without a user
Jwt::guard('clients')->claims();   // never another guard's claims

auth()->guard('api')->payload();   // the same claims, straight from the guard

Jwt::guard($name)->claims() pomenúva guard, z ktorého číta, takže claimy jedného guardu nikdy neodpovedajú za iný. Claimy sa načítavajú cez guardy auth managera pre daný request, nikdy zo statického stavu, takže dlhobežiace procesy (Octane, fronty) neprenesú claimy jedného requestu do ďalšieho. Oba guardy rešpektujú setUser(): nastaveného používateľa si podržia až do forgetUser(), takže funguje aj actingAs($user, $guard) z Laravelu (pozrite Testovanie). validate() prejde celým rovnakým procesom:

// Runs the full pipeline: signature, pins, scope, denylist, identity, token version.
Auth::guard('api')->validate(['token' => $jwt]);   // bool

Kontrola verzie tokenu

V provider režime nastavte guard.token_version, aby zvýšená verzia zneplatnila staré tokeny. Uprednostnite invokable triedu — prežije php artisan config:cache, closure nie:

namespace App\Auth;

use Illuminate\Contracts\Auth\Authenticatable;

final class TokenVersion
{
    public function __invoke(Authenticatable $user): int
    {
        return (int) $user->token_version;
    }
}
// config/jwt.php
'guard' => [
    'token_version' => \App\Auth\TokenVersion::class,   // __invoke(Authenticatable $user): int
],

Guard porovná vrátený int s claimom tv v tokene; nezhoda alebo chýbajúci tv token odmietne. Zvýšením uloženej verzie odhlásite používateľa zo všetkých zariadení — napríklad po zmene hesla:

// Mint with the user's current version…
Jwt::mintAccessToken(
    AccessTokenRequest::for($user->id)->tokenVersion($user->token_version)
);

// …then "log out everywhere": every token carrying the old tv is rejected.
$user->increment('token_version');

Hodnota, ktorú guard nedokáže zavolať — chýbajúca trieda či trieda bez __invoke — vyhodí JwtMisconfigured namiesto toho, aby kontrolu potichu vypla.

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.