---
title: "Rozšírenie — JWT for Laravel | Roundly"
description: "Nahraďte ktorýkoľvek kontrakt — vydavateľa, overovač, servisné tokeny, denylist — a zapojte vlastnú triedu identity."
url: https://roundly-consulting.com/sk/open-source/navody/jwt-for-laravel/rozsirenie
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)

# Rozšírenie

Každá časť balíka je v JwtServiceProvider naviazaná cez kontrakt, takže hostiteľská aplikácia môže ktorúkoľvek nahradiť vlastnou implementáciou:

| Kontrakt | Predvolená implementácia | Zodpovednosť |
| --- | --- | --- |
| `UserTokens\Contracts\UserTokenIssuer` | NativeUserTokenIssuer | Vydávanie RS256 používateľských tokenov. |
| `UserTokens\Contracts\UserTokenVerifier` | NativeUserTokenVerifier | Overovanie RS256 tokenov — podpis, čas, pripnutý iss/aud. |
| `ServiceTokens\Contracts\ServiceTokenIssuer` | NativeServiceTokenService | Vydávanie HS256 servisných tokenov. |
| `ServiceTokens\Contracts\ServiceTokenVerifier` | NativeServiceTokenService | Overovanie prichádzajúcich HS256 servisných tokenov. |
| `Denylist\Contracts\Denylist` | CacheDenylist | Ukladanie a dopytovanie zneplatnených jti. |

```php
use RoundlyConsulting\Jwt\Denylist\Contracts\Denylist;

// A service provider in the host app.
public function register(): void
{
    $this->app->singleton(Denylist::class, fn ($app) => new DatabaseDenylist(/* ... */));
}
```

Metódy kontraktu implementujte presne. Kontrakty používateľských tokenov majú voliteľné audience, ktoré musí vlastná implementácia prijať — guard jwt vždy odovzdáva do verify() svoje audience. Parameter s tokenom vo vlastnej metóde verify() označte, rovnako ako balík, cez #\[SensitiveParameter\], aby token nikdy neležal v rámci stack trace:

```php
// Denylist
public function has(string $jti): bool;
public function deny(string $jti, CarbonImmutable $until): void;
public function denyToken(IssuedToken $token): void;

// UserTokenIssuer / UserTokenVerifier take an optional audience
public function mint(string $subject, Scope|string $scope, int $ttl, array $extraClaims = [], ?string $audience = null): IssuedToken;
public function verify(#[SensitiveParameter] string $jwt, ?string $audience = null): Claims;   // null ⇒ the configured jwt.audience
```

Jwt::services() získa ServiceTokenIssuer a ServiceTokenVerifier z kontajnera pri každom volaní, takže nahradenie vydavateľa zmení, čo vytvoria issue(), request() a authenticate(), a nahradenie overovača zmení, čo prijme verify() aj guard service-jwt.

## Vlastná identita v claims režime

TokenUser zámerne nie je final a vytvára sa cez new static, takže podtrieda sa z guardu vráti ako ona sama:

```php
namespace App\Auth;

use RoundlyConsulting\Jwt\UserTokens\TokenUser;

class ApiActor extends TokenUser
{
    public function tenant(): string
    {
        return $this->claims()->has('tenant')
            ? $this->claims()->string('tenant')
            : 'none';
    }
}
```

```php
// config/jwt.php — or per guard via auth.guards.<name>.identity
'guard' => [
    'identity' => \App\Auth\ApiActor::class,
],
```

Zachovajte signatúru konštruktora TokenUser alebo prepíšte aj fromClaims(). Ak začínate od nuly, implementujte ClaimsAuthenticatable — fromClaims(Claims $claims): self nad rozhraním Authenticatable z Laravelu — a pre autorizáciu z claimov aj ChecksPermissions s hasPermission(string $ability): bool. Neplatná trieda identity sa nahradí triedou TokenUser.

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