NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Relácia je rodina tokenov; údaje o zariadení nesie jej aktívny riadok. ID riadkov sa pri každej rotácii menia, preto reláciu adresujte cez ID rodiny — stabilné ID relácie, ktoré sa prirodzene hodí aj ako claim sid vo vašom prístupovom tokene:

$sessions = RefreshTokens::sessions($user);

$sessions->all();                              // active rows, newest first
$sessions->find($familyId);                    // ?RefreshToken — active row of that family
$sessions->revoke($familyId);                  // bool — revokes every active row of it
$sessions->revokeAllExcept($currentFamilyId);  // "log out my other devices"; int
$sessions->revokeOthers($currentAccess->jti);  // same, keyed by access reference
$sessions->revokeAll();                        // revoke every session

// On the owner model via the trait:
$user->refreshTokens();  // MorphMany, all tokens
$user->sessions();       // MorphMany, active tokens only
MetódaVraciaPoznámka
sessions($owner)->all()Collection<RefreshToken>Aktívne riadky, od najnovšieho.
sessions($owner)->find($familyId)?RefreshTokenAktívny riadok danej rodiny; null pri chybnom ID alebo rodine iného vlastníka.
sessions($owner)->revoke($familyId, $reason)boolOdvolá všetky aktívne riadky rodiny (predvolene Logout); false, ak nebolo nič aktívne.
sessions($owner)->revokeAllExcept($keepFamilyId, $reason)intPonechá jednu reláciu podľa ID rodiny (predvolene LogoutAll); null alebo neznáme ID odvolá všetko.
sessions($owner)->revokeOthers($currentAccessReference, $reason)intPonechá reláciu s daným odkazom na prístupový token (predvolene LogoutAll); null odvolá všetko.
sessions($owner)->revokeAll($reason)intOdvolá všetky relácie (predvolene LogoutAll).
session($row)->enrich($device, $location)voidZapíše údaje o zariadení a polohe dodané aplikáciou do jedného riadku (model alebo jeho kľúč).
session($row)->revoke($reason)boolOdvolá jeden riadok, ktorý máte k dispozícii (predvolene Manual).
  • Objekt pracuje v rozsahu vlastníka: rodina iného vlastníka — aj vlastníka iného typu s rovnakým id — je neznáma (find() vráti null, revoke() false a nič sa nezmení).
  • ID sa pred akýmkoľvek dopytom overia ako UUID — chybné ID vráti null/false, nikdy nie chybu databázy.
  • revoke() odvolá všetky aktívne riadky rodiny — rotácia v tolerančnom okne môže nakrátko ponechať dva — a každý odkaz na prístupový token zneplatní raz.
  • revokeAllExcept s null alebo neznámym ID odvolá všetko: pri neznámej „aktuálnej relácii“ je bezpečnejšie zlyhať uzavreto.
  • $row->sessionStartedAt() vráti začiatok rodiny, ktorý sa pri rotácii dedí bez zmeny.

Metódy na modeli vlastníka

Trait HasRefreshTokens pridáva metódy, ktoré sa čítajú ako vlastník konajúci sám za seba. Každá deleguje na manažéra — je to skratka pre RefreshTokens::sessions($this) —, takže ich RefreshTokens::fake() tiež zaznamená:

use RoundlyConsulting\RefreshTokens\DataTransferObjects\IssueContext;

$new = $user->issueRefreshToken(new IssueContext(accessReference: $access->jti));
$user->findSession($familyId);              // ?RefreshToken
$user->revokeSession($familyId);            // bool
$user->revokeAllSessions();                 // = RefreshTokens::sessions($user)->revokeAll(); returns count
$user->revokeOtherSessions($currentAccess->jti); // keep current, revoke the rest; returns count

Endpoint „vaše zariadenia“

Zoznam zostavte z aktívnych riadkov; token_hash a access_reference sú pri serializácii skryté, takže bezpečné je vrátiť aj celé riadky:

return RefreshTokens::sessions($user)->all()->map(fn ($session) => [
    'id' => $session->family_id,               // stable session id
    'browser' => $session->browser,
    'os' => $session->os,
    'device' => $session->device_type,
    'city' => $session->city,
    'started_at' => $session->sessionStartedAt(),
    'current' => $session->family_id === $currentFamilyId,
]);

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.