---
title: "Odvolanie a odhlásenie — Refresh Tokens for Laravel | Roundly"
description: "Odhláste jeden token alebo všetky relácie, zaznamenajte dôvod cez RevocationReason a pri zmene hesla odvolajte všetko."
url: https://roundly-consulting.com/sk/open-source/navody/refresh-tokens-for-laravel/odvolanie
language: sk
---

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

[Refresh Tokens for Laravel](https://roundly-consulting.com/sk/open-source/navody/refresh-tokens-for-laravel.md)

# Odvolanie a odhlásenie

```php
use RoundlyConsulting\RefreshTokens\Enums\RevocationReason;

RefreshTokens::revoke($plainFromClient);            // logout with token in hand; bool, idempotent
RefreshTokens::sessions($user)->revokeAll();         // global logout — returns count revoked
RefreshTokens::sessions($user)->revokeAll(RevocationReason::CredentialsChanged);
RefreshTokens::session($row)->revoke();              // one row you hold (reason defaults to Manual)
```

RefreshTokens::revoke() prijíma plaintext (dôvod predvolene Logout). Vráti true, ak ukončil živú reláciu, a false pre neznámy token alebo token, ktorého relácia sa už skončila — opakované volanie je teda bezpečné. Token, ktorý expiroval nepoužitý, sa považuje za ukončený: zostane bez zmeny, bez SessionRevoked a bez volania AccessTokenRevoker. Riadok, ktorý už máte, odvoláte cez session($row)->revoke() (dôvod predvolene Manual):

```php
RefreshTokens::session($row)->revoke();                           // the model or its key — reason Manual
RefreshTokens::session($row)->revoke(RevocationReason::Security);  // every verb takes an explicit reason
RefreshTokens::revoke($plainFromClient, RevocationReason::Security);
```

## Odhlásenie už rotovaným tokenom

Aj použitý token reláciu ukončí. Reláciu už nedrží — tá žije ďalej v riadku, do ktorého bol rotovaný — takže odvolanie samotného použitého riadku by tomu, kto ho rotoval, dovolilo obnovovať ďalej. Preto:

```php
$a = RefreshTokens::issue($user, new IssueContext(accessReference: 'acc-a'));
RefreshTokens::rotate($a->plainText, new RotationContext(accessReference: 'acc-b'));

// The client logs out with the token it held before the rotation:
RefreshTokens::revoke($a->plainText);   // true — outside rotation.grace the whole family is revoked
                                        // as ReuseDetected and RefreshTokenReuseDetected fires
```

- Mimo rotation.grace je použitý token signál krádeže a spracuje sa presne ako opakované predloženie pri redeem(): celá rodina sa odvolá s dôvodom ReuseDetected, každý živý odkaz na prístupový token sa zneplatní, spustí sa RefreshTokenReuseDetected a revoke() vráti true. Zadaný dôvod sa nepoužije — riadky zaznamenajú skutočnú príčinu.
- V rámci rotation.grace (vlastná obnova klienta v súbehu s jeho odhlásením) sa živé riadky rodiny odvolajú s vaším dôvodom, pre každý sa spustí SessionRevoked a udalosť o opätovnom použití sa nespustí.
- Relácia zachytená uprostred rotácie sa v oboch prípadoch uzavrie, takže rozpracovaná náhrada sa odmietne.

Každé odvolanie uloží revoked\_reason, zavolá zaregistrovaný AccessTokenRevoker raz pre každý živý odkaz na prístupový token a spustí SessionRevoked.

## Dôvody odvolania

Každá metóda odvolania prijíma voliteľný RevocationReason, ktorý sa uloží do revoked\_reason a prenesie v udalosti SessionRevoked:

| Prípad | Hodnota | Kedy |
| --- | --- | --- |
| `Rotated` | `rotated` | Nahradený rotáciou. |
| `Logout` | `logout` | Výslovné odhlásenie jednej relácie. |
| `LogoutAll` | `logout_all` | Globálne odhlásenie / odvolanie všetkého. |
| `ReuseDetected` | `reuse_detected` | Odvolanie rodiny pri signáli krádeže. |
| `Expired` | `expired` | Odstránený po expirácii. |
| `Manual` | `manual` | Odvolanie administrátorom alebo aplikáciou. |
| `CredentialsChanged` | `credentials_changed` | Zmena hesla, 2FA alebo passkey. |
| `AccountDisabled` | `account_disabled` | Vlastník deaktivovaný alebo zmazaný. |
| `SessionLimit` | `session_limit` | Vytlačená limitom relácií na vlastníka. |
| `Security` | `security` | Akákoľvek iná bezpečnostná reakcia. |

## Odhlásenie všade pri zmene hesla

Štandardnou reakciou na zmenu prihlasovacích údajov je odvolanie všetkých relácií. Napojte ho vo flow zmeny hesla alebo cez observer modelu — balík metódu poskytuje, no do vášho modelu User sa sám nenapája:

```php
// In a change-password action:
$user->update(['password' => Hash::make($newPassword)]);
$user->revokeAllSessions(RevocationReason::CredentialsChanged);

// …or via a saved observer:
User::saved(function (User $user): void {
    if ($user->wasChanged('password')) {
        $user->revokeAllSessions(RevocationReason::CredentialsChanged);
    }
});
```

## Obnova odhlásenie nepredbehne

Relácia odvolaná uprostred rotácie — token už je uplatnený, náhrada ešte nie je vydaná — v tom okamihu nemá aktívny riadok. Metódy relácií (sessions()->revokeAll(), revokeOthers(), revokeAllExcept(), revoke()) takú reláciu tiež uzavrú: uplatnenému riadku nastavia dôvod, zneplatnia jeho odkaz na prístupový token a spustia SessionRevoked. Rozpracovaná náhrada sa potom odmietne — rotate() vráti null, výslovné issue() vyhodí InvalidTokenFamilyException alebo sa vráti už odvolané.

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