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

Balík funguje bez akejkoľvek konfigurácie — každý kľúč má rozumnú predvolenú hodnotu z env. Publikovaný config/refresh-tokens.php:

use RoundlyConsulting\RefreshTokens\Enums\DeviceType;
use RoundlyConsulting\RefreshTokens\Models\RefreshToken;

return [
    // Storage
    'table' => env('REFRESH_TOKENS_TABLE', 'refresh_tokens'),
    'model' => RefreshToken::class,
    'device_type_cast' => DeviceType::class,
    'key_type' => env('REFRESH_TOKENS_KEY_TYPE', 'bigint'),

    // Token lifetime & shape
    'ttl' => env('REFRESH_TOKENS_TTL', 2_592_000),                   // seconds; 30 days (sliding)
    'absolute_ttl' => env('REFRESH_TOKENS_ABSOLUTE_TTL', 7_776_000), // seconds; 90 days
    'token_length' => env('REFRESH_TOKENS_LENGTH', 64),              // min 32, max 4096

    // Hashing at rest
    'hash' => [
        'algo' => env('REFRESH_TOKENS_HASH_ALGO', 'sha256'),
        'key' => env('REFRESH_TOKENS_HASH_KEY'), // optional HMAC pepper; null = plain hash
    ],

    // Rotation / anti-replay
    'rotation' => [
        'grace' => env('REFRESH_TOKENS_ROTATION_GRACE', 0),
    ],

    // Expiry sweeping (the host schedules the command / model:prune)
    'prune' => [
        'after' => env('REFRESH_TOKENS_PRUNE_AFTER', 30), // days past revoke/expiry; at least 1
    ],
];

Všetky kľúče

KľúčPredvolenéEnvÚčel
tablerefresh_tokensREFRESH_TOKENS_TABLENázov tabuľky. Prázdna hodnota sa považuje za nenastavenú, takže platí refresh_tokens; hodnota, ktorá nie je reťazec, vyhodí výnimku.
modelRefreshToken::class—Model tokenu; nahraďte ho podtriedou modelu balíka. Čokoľvek, čo nie je RefreshToken ani jeho podtrieda, vyhodí výnimku.
device_type_castDeviceType::class—Eloquent cast pre device_type — predvolene enum DeviceType; hodnota 'string' (alebo akýkoľvek Eloquent cast) uloží voľný názov zariadenia bez zmeny. Prázdna hodnota sa považuje za nenastavenú, takže platí enum DeviceType; hodnota, ktorá nie je reťazec, vyhodí výnimku.
key_typebigintREFRESH_TOKENS_KEY_TYPETyp primárneho kľúča spoločný pre všetky modely vlastníkov: bigint, uuid alebo ulid (prázdna hodnota sa považuje za nenastavenú, takže platí bigint). Iná hodnota vyhodí InvalidConfigurationException.
ttl2592000 (30 days)REFRESH_TOKENS_TTLPredvolená posuvná životnosť pri vydaní/rotácii, v sekundách. Aspoň 1.
absolute_ttl7776000 (90 days)REFRESH_TOKENS_ABSOLUTE_TTLPredvolený absolútny strop relácie, uložený pri založení rodiny. 0 ho vypne; záporná hodnota vyhodí výnimku.
token_length64REFRESH_TOKENS_LENGTHDĺžka plaintextu v znakoch base64url (~384 bitov pri 64). 32–4096, inak vyhodí výnimku.
hash.algosha256REFRESH_TOKENS_HASH_ALGOAlgoritmus uloženého odtlačku; povolené len sha256, sha384 a sha512 (prázdna hodnota sa považuje za nenastavenú, takže platí sha256; čokoľvek iné vyhodí výnimku).
hash.keynullREFRESH_TOKENS_HASH_KEYVoliteľný HMAC pepper; nenastavená hodnota (null alebo prázdna) = čistý hash, hodnota, ktorá nie je reťazec, vyhodí výnimku.
rotation.grace0REFRESH_TOKENS_ROTATION_GRACESekundy, počas ktorých sa opätovne predložený token ešte nepovažuje za zneužitie. 0 = striktne; záporná hodnota vyhodí výnimku.
prune.after30REFRESH_TOKENS_PRUNE_AFTERPočet dní uchovania záznamov po odvolaní/expirácii pred premazaním. Aspoň 1 deň; nižšia hodnota vyhodí výnimku.

Prostredie (env)

Všetky kľúče okrem model a device_type_cast sa čítajú z env, takže konfiguráciu publikujete len zriedka:

REFRESH_TOKENS_TABLE=refresh_tokens
REFRESH_TOKENS_KEY_TYPE=bigint
REFRESH_TOKENS_TTL=2592000
REFRESH_TOKENS_ABSOLUTE_TTL=7776000
REFRESH_TOKENS_LENGTH=64
REFRESH_TOKENS_HASH_ALGO=sha256
REFRESH_TOKENS_HASH_KEY=
REFRESH_TOKENS_ROTATION_GRACE=0
REFRESH_TOKENS_PRUNE_AFTER=30

Validovaná konfigurácia

Každý kľúč pri chybe hlasno zlyhá namiesto tichej opravy, takže preklep v env neoslabí úložisko tokenov:

  • hash.algo je obmedzený na zoznam SHA-2 (sha256, sha384, sha512). Prázdna hodnota sa považuje za nenastavenú, takže platí sha256; čokoľvek iné — md5, crc32b, … — vyhodí InvalidTokenConfigurationException.
  • token_length musí byť v rozsahu 32 až 4096 znakov; mimo neho vyhodí výnimku namiesto vydania tokenu, ktorý sa dá uhádnuť hrubou silou.
  • Každé celé číslo — ttl, absolute_ttl, token_length, rotation.grace a prune.after — sa číta prísne: int alebo kanonický celočíselný reťazec ('30', ako prichádzajú hodnoty z env). Nenastavený kľúč — chýbajúci, null alebo prázdny ('', čo dáva KEY= v .env) — dostane predvolenú hodnotu; 'five', '1.5' alebo hodnota mimo rozsahu vyhodí InvalidTokenConfigurationException s názvom kľúča — nikdy nie tichú 0 ani predvolenú hodnotu.
  • table a device_type_cast musia byť reťazce; prázdna hodnota sa považuje za nenastavenú, takže platí predvolená. hash.key môže byť null alebo prázdny (bez peppera), no hodnota, ktorá vôbec nie je reťazec, vyhodí výnimku namiesto toho, aby sa pepper potichu vynechal.
  • key_type prijíma bigint, uuid alebo ulid; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča aj hodnotou. Preklep ako guid by inak pre vlastníkov s uuid či ulid vytvoril bigint stĺpec owner_id a nič by nezlyhalo, kým by sa riadky prestali spájať. id, zápis, ktorý balík používal pred prechodom na spoločný typ kľúča, sa už neprijíma — použite bigint.
  • model musí byť RefreshToken alebo jeho podtrieda; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča namiesto tichého návratu k modelu z balíka.

Cast typu zariadenia

device_type sa predvolene castuje na enum DeviceType z balíka (desktop, mobile, tablet, bot, unknown). Ak váš parser user-agenta vracia bohatší, voľný slovník, uložte ho bez zmeny s ľubovoľným Eloquent castom:

// config/refresh-tokens.php — store a free-form device vocabulary verbatim
'device_type_cast' => 'string',

Kontrola aktuálnej konfigurácie

php artisan about --only=refresh-tokens

Sekcia about neprezradí žiadne tajomstvo — nič, čo by mohlo uniknúť zo snímky obrazovky pre podporu:

  • Token model, Owner (typ morph kľúča), Sliding TTL, Absolute TTL (alebo DISABLED), Token length, Hash algorithm, Rotation grace (alebo STRICT) a Prune after. Sliding TTL, Absolute TTL, Token length, Hash algorithm, Rotation grace a Prune after ukážu INVALID, ak má hodnota chybný tvar — about to nahlási namiesto vyhodenia výnimky.
  • Table ukáže DEFAULT alebo CUSTOM, nikdy názov.
  • Hash pepper ukáže SET alebo MISSING, nikdy hodnotu.
  • Access-token revoker ukáže NONE (no-op) alebo BOUND.

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.