---
title: "Databázová schéma — Refresh Tokens for Laravel | Roundly"
description: "Stĺpce tabuľky refresh_tokens a RefreshTokenBlueprint na zopakovanie či prevzatie schémy vo vlastnej migrácii."
url: https://roundly-consulting.com/sk/open-source/navody/refresh-tokens-for-laravel/databazova-schema
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)

# Databázová schéma

Tabuľku (predvolene refresh\_tokens) vytvorí jediná migrácia, ktorá sa len publikuje. Cudzie kľúče nie sú žiadne:

| Stĺpce | Typ | Poznámka |
| --- | --- | --- |
| `id` | bigint | ID riadku — mení sa pri každej rotácii; relácie adresujte cez family\_id. |
| `owner_type, owner_id` | string + bigint/uuid/ulid | Polymorfný vlastník s kompozitným indexom; owner\_id sa riadi key\_type. |
| `token_hash` | string(128), unique | Uložený odtlačok; zmestí sa aj sha512 v hex. Skrytý pri serializácii. |
| `family_id` | uuid, indexed | Stabilné ID relácie, normalizované na malé písmená. |
| `access_reference` | string(64), nullable, indexed | Nepriehľadný odkaz na prístupový token; dlhší odkaz sa odmietne ešte pred akýmkoľvek dopytom. Skrytý pri serializácii. |
| `user_agent, browser, browser_version, os, os_version, device_type, is_bot` | nullable | Údaje o zariadení — dodáva aplikácia, prenášajú sa pri rotácii. |
| `country, city, country_code, ip_address` | nullable | Údaje o polohe — dodáva aplikácia, prenášajú sa pri rotácii. |
| `family_started_at, absolute_expires_at, meta` | nullable; meta is jsonb | Stĺpce relácie, ktoré dedí každý riadok rodiny. |
| `revoked_reason, expires_at, revoked_at` | lifecycle | expires\_at a revoked\_at sú indexované. |
| `created_at, updated_at, deleted_at` | timestamps | Štandardné časové značky a soft delete. |

## Prevzatie existujúcej tabuľky tokenov

RefreshTokenBlueprint zopakuje tvar tabuľky balíka vo vašej migrácii: columns() vytvorí celú tabuľku a addSessionColumns() pridá len tri stĺpce relácie — všetky nullable, takže sa zmestia aj do naplnenej tabuľky:

```php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use RoundlyConsulting\PackageToolkit\Enums\KeyType;
use RoundlyConsulting\RefreshTokens\Support\RefreshTokenBlueprint;

// Reproduce the package table in your own migration:
Schema::create('refresh_tokens', function (Blueprint $table): void {
    RefreshTokenBlueprint::columns($table, KeyType::Ulid);
});

// Or add only the session columns to an existing tokens table:
Schema::table('refresh_tokens', function (Blueprint $table): void {
    RefreshTokenBlueprint::addSessionColumns($table); // family_started_at, absolute_expires_at, meta
});
```

V tej istej migrácii doplňte owner\_type, family\_started\_at a absolute\_expires\_at. Za začiatok rodiny považujte jej prvý riadok:

```php
use App\Models\User;
use Illuminate\Support\Facades\DB;

DB::table('refresh_tokens')->update(['owner_type' => (new User)->getMorphClass()]);

// family_started_at = the family's FIRST row, not each row's own created_at.
DB::table('refresh_tokens')
    ->select('family_id', DB::raw('min(created_at) as started'))
    ->groupBy('family_id')
    ->orderBy('family_id')
    ->each(function (object $family): void {
        $started = \Carbon\CarbonImmutable::parse($family->started);

        DB::table('refresh_tokens')->where('family_id', $family->family_id)->update([
            'family_started_at' => $started,
            'absolute_expires_at' => $started->addSeconds(7_776_000), // omit if absolute_ttl = 0
        ]);
    });
```

Aj bez doplnenia staré riadky fungujú: sessionStartedAt() použije created\_at a rodina, ktorej riadky nemajú absolute\_expires\_at, nemá strop, kým sa nezaloží nanovo.

## 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)
