Konfigurácia
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 |
|---|---|---|---|
table | refresh_tokens | REFRESH_TOKENS_TABLE | Ná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. |
model | RefreshToken::class | — | Model tokenu; nahraďte ho podtriedou modelu balíka. Čokoľvek, čo nie je RefreshToken ani jeho podtrieda, vyhodí výnimku. |
device_type_cast | DeviceType::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_type | bigint | REFRESH_TOKENS_KEY_TYPE | Typ 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. |
ttl | 2592000 (30 days) | REFRESH_TOKENS_TTL | Predvolená posuvná životnosť pri vydaní/rotácii, v sekundách. Aspoň 1. |
absolute_ttl | 7776000 (90 days) | REFRESH_TOKENS_ABSOLUTE_TTL | Predvolený absolútny strop relácie, uložený pri založení rodiny. 0 ho vypne; záporná hodnota vyhodí výnimku. |
token_length | 64 | REFRESH_TOKENS_LENGTH | Dĺžka plaintextu v znakoch base64url (~384 bitov pri 64). 32–4096, inak vyhodí výnimku. |
hash.algo | sha256 | REFRESH_TOKENS_HASH_ALGO | Algoritmus 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.key | null | REFRESH_TOKENS_HASH_KEY | Voliteľný HMAC pepper; nenastavená hodnota (null alebo prázdna) = čistý hash, hodnota, ktorá nie je reťazec, vyhodí výnimku. |
rotation.grace | 0 | REFRESH_TOKENS_ROTATION_GRACE | Sekundy, 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.after | 30 | REFRESH_TOKENS_PRUNE_AFTER | Poč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=30Validovaná 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-tokensSekcia 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 kryptomienOdoslaní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.