---
title: "Nonce a jednorazové URL — Sentinel for Laravel | Roundly"
description: "Jednorazové tokeny viazané na účel a jednorazové podpísané URL — ukladá sa len hash a spotrebovanie je jeden atomický príkaz."
url: https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel/nonce-a-jednorazove-url
language: sk
---

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

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

# Nonce a jednorazové URL

Nonce je jednorazový náhodný token viazaný na účel: kód na obnovu hesla či overenie emailu, jednorazové stiahnutie, krok potvrdenia.

```php
$nonce = Sentinel::nonces()->issue('password-reset', ttl: 900, subject: $user);

$nonce->value;        // 43 base64url characters (≈ 256 bits, nonces.length); only its SHA-256 is stored
$nonce->purpose;
$nonce->expiresAt;

Sentinel::nonces()->consume('password-reset', $token, $user);        // true exactly once
Sentinel::nonces()->consumeOrFail('password-reset', $token, $user);  // NonceRejectedException (403) otherwise
```

- Ukladá sa len SHA-256(value) — výpis databázy nonce prehrať neumožní.
- Účel: ^\[a-z0-9\]\[a-z0-9:.\_-\]{0,127}$ (inak InvalidPurposeException — pri vydaní aj pri spotrebovaní).
- TTL: nonces.ttl (900 s), ak nie je zadané; zadané TTL musí byť 1–2 592 000 sekúnd.
- Spotrebovanie je jeden príkaz UPDATE; úspech znamená, že sa zmenil práve jeden riadok. Z ôsmich súbežných pokusov na PostgreSQL aj MySQL uspeje práve jeden.
- Nesprávny účel, iný subjekt, expirovaný, spotrebovaný či neznámy nonce sú pre volajúceho nerozlíšiteľné (false). Nonce vydaný bez subjektu sa spotrebuje bez subjektu.

## Jednorazové podpísané URL

```php
$url = Sentinel::nonces()->signedRoute('exports.download', ['export' => $export->id], ttl: 600);

Route::get('/exports/{export}', DownloadExport::class)
    ->name('exports.download')
    ->middleware('sentinel.single-use');
```

signedRoute() vydá nonce pre účel url:<route name>, pridá ho ako \_nonce a vráti dočasnú podpísanú URL Laravelu. sentinel.single-use najprv vyžaduje platný podpis Laravelu — zmenený alebo expirovaný odkaz sa odmietne skôr, než sa siahne na nonce — a potom nonce pre danú routu spotrebuje. Druhá návšteva alebo nonce presunutý na inú routu odpovie 403 (application/problem+json, nonce\_rejected).

## Ploché tvary

```php
use RoundlyConsulting\Sentinel\DataTransferObjects\ConsumeNonceRequest;
use RoundlyConsulting\Sentinel\DataTransferObjects\IssueNonceRequest;
use RoundlyConsulting\Sentinel\DataTransferObjects\PruneOptions;
use RoundlyConsulting\Sentinel\DataTransferObjects\SignedRouteRequest;

$nonce = Sentinel::issueNonce(new IssueNonceRequest('password-reset', ttl: 900, subject: $user));
Sentinel::consumeNonce(new ConsumeNonceRequest('password-reset', $nonce->value, $user));
$url = Sentinel::signedRoute(new SignedRouteRequest('exports.download', ['export' => $export->id], ttl: 600));
$pruned = Sentinel::prune(new PruneOptions(idempotency: true, nonces: true, dryRun: true));   // counts only
```

## Úložiská a čistenie

database (predvolené) používa sentinel\_nonces na sentinel.database.connection; cache vyžaduje store so zámkami; pre vlastné úložisko naviažte Contracts\\NonceStore. Overovač RFC 9421 si v tom istom úložisku pamätá nonce každého podpisu — až po úspešnom overení podpisu, takže neautentifikovaná prevádzka ho nezahltí. sentinel:prune (plánovaný denne) zmaže expirované nonce aj idempotenčné kľúče:

```php
use RoundlyConsulting\Sentinel\DataTransferObjects\PruneOptions;

$result = Sentinel::prune();                                                   // both, PruneResult
$result = Sentinel::prune(new PruneOptions(idempotency: false, nonces: true, dryRun: true));
$result->idempotencyKeys;    // deleted (or, on a dry run, would be deleted)
$result->nonces;
```

Úložiská cache nechajú záznamy expirovať samy a hlásia 0. Idempotenčný kľúč, ktorý stále drží živý lease, sa nikdy nezmaže.

## 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/sentinel-for-laravel.md)
