---
title: "Vydávanie používateľských tokenov — JWT for Laravel | Roundly"
description: "Vydávajte RS256 prístupové tokeny cez fluentný AccessTokenRequest, plus challenge, email-verify a tokeny s vlastným scope."
url: https://roundly-consulting.com/sk/open-source/navody/jwt-for-laravel/pouzivatelske-tokeny
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)

# Vydávanie používateľských tokenov

Používateľské tokeny sú RS256 JWT podpísané na vydávajúcej aplikácii privátnym RSA kľúčom. Vydavateľ pripne iss, aud, sub, iat, nbf, exp, jti a scope — tieto vždy prepíšu rovnomenný claim od volajúceho, takže doplnkové claimy nikdy nepodvrhnú identitu.

## Prístupové tokeny

AccessTokenRequest je nemenný fluentný builder — každá metóda vracia novú inštanciu. Výsledný token má scope = access:

```php
use RoundlyConsulting\Jwt\Facades\Jwt;
use RoundlyConsulting\Jwt\UserTokens\AccessTokenRequest;

$request = AccessTokenRequest::for($user->id)                     // subject (string|int)
    ->email($user->email, verified: $user->hasVerifiedEmail())    // email + email_verified claims
    ->tokenVersion($user->token_version)                          // tv claim (freshness)
    ->permissions('posts.view', 'posts.edit')                     // permissions claim
    ->withClaims(['org' => 42]);                                  // arbitrary extra claims

$issued = Jwt::mintAccessToken($request);
```

- for($subject) — claim sub; prijme reťazec aj int.
- email($email, verified: bool) — claimy email a email\_verified.
- tokenVersion(int) — claim tv, ktorý porovnáva kontrola verzie tokenu v guarde.
- permissions(...$abilities) — claim permissions pre autorizáciu z claimov.
- withClaims(array) — ľubovoľné doplnkové claimy; registrované a známe claimy majú vždy prednosť.

## Vrátenie tokenu

Každé vydanie vracia readonly objekt IssuedToken:

```php
$issued->token;      // string — the compact JWS to return to the client
$issued->expiresAt;  // CarbonImmutable — the expiry
$issued->jti;        // string — the token id (store it to denylist later)

return response()->json([
    'access_token' => $issued->token,
    'token_type' => 'Bearer',
    'expires_at' => $issued->expiresAt->toIso8601String(),
]);
```

## Audience, platnosť a claimy relácie

audience() a ttl() riadia vydavateľa a do payloadu sa nikdy nezapíšu. sid, amr a auth\_time sa pridajú len vtedy, keď ich nastavíte, takže existujúci kód vydáva presne to isté ako doteraz:

```php
AccessTokenRequest::for($user->id)
    ->audience('app-clients')                 // aud — defaults to jwt.audience
    ->ttl(600)                                // seconds — defaults to jwt.ttl
    ->sessionId($familyId)                    // sid
    ->authMethods('pwd', 'otp', 'mfa')        // amr (RFC 8176)
    ->authTime($loggedInAt);                  // auth_time — int or any DateTimeInterface

$claims->sessionId();    // ?string
$claims->authMethods();  // list<string>, [] when absent
$claims->authTime();     // ?int
```

ttl() pod jednu sekundu, prázdne sessionId() a prázdne alebo chýbajúce authMethods() vyhodia InvalidArgumentException. amr sa deduplikuje, platí prvý výskyt.

## Challenge, overenie e-mailu a vlastné scope

Tokeny 2fa\_pending a email\_verify použijú nastavené challenge\_ttl a verify\_ttl — číslo nemusíte odovzdávať ručne:

```php
Jwt::mintChallengeToken($subject);                 // scope=2fa_pending, exp = challenge_ttl
Jwt::mintEmailVerifyToken($subject, $user->email); // scope=email_verify, exp = verify_ttl

// Extra claims on a challenge token:
Jwt::mintChallengeToken($subject, ['method' => 'totp']);

// Any other scope via the generic mint():
Jwt::mint($subject, 'my_custom_scope', ttl: 120, extraClaims: ['org' => 42]);
```

## Enum Scope

Štyri vstavané scope sú backed enum. mint() prijme prípad Scope aj ľubovoľný reťazec, takže vlastné scope zostávajú voľnými reťazcami:

```php
use RoundlyConsulting\Jwt\UserTokens\Scope;

Scope::Access->value;        // 'access'
Scope::TwoFaPending->value;  // '2fa_pending'
Scope::EmailVerify->value;   // 'email_verify'
Scope::Service->value;       // 'service'

Jwt::mint($subject, Scope::Access, ttl: 900);  // pass an enum case, or any string
Scope::values();                               // Collection: ['access', '2fa_pending', …]
```

## Bez fasády

Uprednostnite fasádu. Na pozadí deleguje na kontrakt UserTokenIssuer (naviazaný na NativeUserTokenIssuer), ktorý môžete získať aj priamo — pozrite DI a akcie:

```php
use RoundlyConsulting\Jwt\UserTokens\AccessTokenRequest;
use RoundlyConsulting\Jwt\UserTokens\Contracts\UserTokenIssuer;

$issued = app(UserTokenIssuer::class)->mintAccessToken(
    AccessTokenRequest::for($user->id)->email($user->email, verified: true)
);
```

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