---
title: "Guardy — JWT for Laravel | Roundly"
description: "Zapojte drivery jwt a service-jwt — claims režim alebo Eloquent provider, spracovanie requestu a kontrola verzie tokenu."
url: https://roundly-consulting.com/sk/open-source/navody/jwt-for-laravel/guardy
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[JWT for Laravel](https://roundly-consulting.com/sk/open-source/navody/jwt-for-laravel.md)

# Guardy

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

```php
'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:

```php
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.

```php
$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

```php
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:

```php
// 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:

```php
namespace App\Auth;

use Illuminate\Contracts\Auth\Authenticatable;

final class TokenVersion
{
    public function __invoke(Authenticatable $user): int
    {
        return (int) $user->token_version;
    }
}
```

```php
// 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:

```php
// 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/jwt-for-laravel.md)
