---
title: "Konfigurácia — Two-Factor for Laravel | Roundly"
description: "Všetky kľúče config/two-factor.php s predvolenými hodnotami — TOTP parametre, vydavateľ, záložné kódy, limiter, replay guard a stĺpce."
url: https://roundly-consulting.com/sk/open-source/navody/two-factor-for-laravel/konfiguracia
language: sk
---

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

[Two-Factor for Laravel](https://roundly-consulting.com/sk/open-source/navody/two-factor-for-laravel.md)

# Konfigurácia

Publikovaný config/two-factor.php v plnom znení. Predvolené hodnoty TOTP zodpovedajú bežným autentifikačným aplikáciám (RFC 6238):

```php
use RoundlyConsulting\Crypto\Otp\OtpAlgorithm;
use RoundlyConsulting\TwoFactor\Enums\RecoveryCodeStorage;
use RoundlyConsulting\TwoFactor\Enums\ReplayGuardMode;

return [
    // TOTP parameters — defaults match standard authenticator apps (RFC 6238).
    // Bounds are enforced at runtime; out-of-range or non-integer values (e.g.
    // 'five') throw InvalidTwoFactorConfigException rather than silently weakening 2FA.
    'algorithm' => OtpAlgorithm::Sha1->value,     // 'sha1' | 'sha256' | 'sha512'
    'digits' => 6,                                // 6–8
    'period' => 30,                               // 15–120 seconds per timestep
    'window' => 1,                                // 0–2: accept ±N timesteps of drift
    'secret_length' => 32,                        // base32 chars (16–4096); 32 = 160 bits; 1/3/6 (mod 8) round up by one

    // Provisioning (otpauth:// URI). issuer falls back to config('app.name') at runtime.
    'issuer' => env('TWO_FACTOR_ISSUER'),         // null/blank → app.name

    'recovery_codes' => [
        'count' => 8,
        'storage' => RecoveryCodeStorage::Hashed->value, // 'hashed' (default) | 'encrypted'
    ],

    // Built-in brute-force limiter for attempt(), keyed per user. Set to null
    // to disable it and rely on your own throttle middleware instead.
    'attempts' => [
        'max' => 5,                               // failed attempts before lockout
        'decay' => 60,                            // seconds the lockout lasts
    ],

    // Replay protection: reject any code whose timestep <= the last successful one.
    'replay_guard' => ReplayGuardMode::Column->value, // 'column' | 'cache' | 'none' (null → none; blank → column)
    'cache' => [
        'store' => env('TWO_FACTOR_CACHE_STORE'), // null/blank → default store (used by cache guard)
        'ttl' => 60 * 60 * 24,                    // seconds to retain last timestep in cache mode (≥ (2 × window + 1) × period)
    ],

    // The table the published migration adds the columns to. Other account
    // tables get them via `$table->twoFactorColumns()` in your own migration.
    'table' => env('TWO_FACTOR_TABLE', 'users'),

    // Column names on the host account table(s) — remap for non-standard schemas.
    'columns' => [
        'secret' => 'two_factor_secret',
        'recovery_codes' => 'two_factor_recovery_codes',
        'confirmed_at' => 'two_factor_confirmed_at',
        'last_used_timestep' => 'two_factor_last_used_timestep',
    ],
];
```

## Všetky kľúče

| Kľúč | Predvolené | Env | Účel |
| --- | --- | --- | --- |
| `algorithm` | sha1 | — | HMAC haš — sha1, sha256 alebo sha512. Kvôli kompatibilite s autentifikačnými aplikáciami ponechajte sha1. |
| `digits` | 6 | — | Dĺžka kódu, 6–8. |
| `period` | 30 | — | Počet sekúnd jedného časového kroku, 15–120. |
| `window` | 1 | — | Tolerovaný posun hodín v ± časových krokoch, 0–2. Rovnaká hranica platí aj pre $window zadané priamo do verify(). |
| `secret_length` | 32 | — | Dĺžka base32 tajného kľúča, 16–4096 znakov; 32 znakov = 160 bitov. Dĺžka, ktorú base32 reťazec mať nemôže (1, 3 alebo 6 mod 8, napr. 17 či 30), sa zaokrúhli o jeden znak nahor, takže kľúč sa vždy dá dekódovať. |
| `issuer` | null | TWO\_FACTOR\_ISSUER | Vydavateľ v provisioning URI; null alebo prázdna hodnota prejde na app.name. Hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
| `recovery_codes.count` | 8 | — | Počet záložných kódov vygenerovaných pri aktivácii (aspoň 1). |
| `recovery_codes.storage` | hashed | — | hashed (jednosmerne) alebo encrypted (vratne, dajú sa zobraziť znova). |
| `attempts` | \['max' => 5, 'decay' => 60\] | — | Vstavané obmedzenie pokusov pre každý účet; vypne ho len null — false, 'off' či 0 vyhodí výnimku a prázdna hodnota ponechá dodané limity. |
| `attempts.max` | 5 | — | Počet neúspešných pokusov pred zablokovaním (≥1). |
| `attempts.decay` | 60 | — | Dĺžka zablokovania v sekundách (≥1). |
| `replay_guard` | column | — | Kde sa ukladá posledný použitý časový krok: column, cache, alebo none/null na vypnutie. Prázdna hodnota sa považuje za nenastavenú a ponechá column. Len reťazce — false či 0 vyhodí výnimku. |
| `cache.store` | null | TWO\_FACTOR\_CACHE\_STORE | Úložisko cache pre cache guard; null alebo prázdna hodnota = predvolené úložisko. Hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
| `cache.ttl` | 86400 | — | Ako dlho (v sekundách) sa v režime cache uchováva posledný časový krok — aspoň (2 × window + 1) × period (pri predvolených hodnotách 90), teda najdlhší čas, počas ktorého je zabratý kód ešte platný. |
| `table` | users | TWO\_FACTOR\_TABLE | Tabuľka, ktorú upraví publikovaná migrácia; ak nie je nastavená (chýba, null alebo prázdna hodnota), users. Hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
| `columns.secret` | two\_factor\_secret | — | Stĺpec so šifrovaným tajným kľúčom. Prázdny názov columns.\* sa považuje za nenastavený a dostane predvolenú hodnotu; názov, ktorý nie je reťazcom, vyhodí výnimku. |
| `columns.recovery_codes` | two\_factor\_recovery\_codes | — | Stĺpec so záložnými kódmi. |
| `columns.confirmed_at` | two\_factor\_confirmed\_at | — | Čas potvrdenia aktivácie. |
| `columns.last_used_timestep` | two\_factor\_last\_used\_timestep | — | Posledný použitý časový krok pre replay guard column. |

## Hranice sa vynucujú

digits (6–8), period (15–120), window (0–2), secret\_length (16–4096) a attempts.max / attempts.decay (aspoň 1) sa kontrolujú za behu. Hodnota mimo rozsahu — alebo hodnota, ktorá vôbec nie je celým číslom, či neznámy algorithm, recovery\_codes.storage alebo replay\_guard — vyhodí InvalidTwoFactorConfigException namiesto tichého oslabenia 2FA.

cache.ttl musí byť aspoň (2 × window + 1) × period sekúnd — pri predvolených hodnotách 90 — a kontroluje sa pri načítaní cache replay guardu: kratší záznam by vypršal ešte počas platnosti zabratého kódu a ten istý kód by sa prijal znova. Dodaných 86400 sa to netýka.

## Striktné čítanie

Každé nastavenie sa číta striktne. Nenastavený kľúč — chýbajúci, null alebo prázdny ('' či len medzery, čo dá riadok KEY= v .env) — dostane predvolenú hodnotu uvedenú vyššie; zadaná hodnota nesprávneho tvaru vyhodí InvalidTwoFactorConfigException s názvom kľúča. Celé čísla prijímajú int alebo kanonický celočíselný reťazec ('30', v takej podobe prichádzajú hodnoty z env), takže 'five' či '1.5' vyhodí výnimku namiesto toho, aby sa z nich stala 0 — nezmyselné window teda nikdy potichu nevypne toleranciu posunu. attempts vypne len null; false, 'off' či 0 vyhodí výnimku a prázdna hodnota ponechá dodané limity. replay\_guard vypne len null alebo none; prázdna hodnota ponechá guard column. issuer, ktorý nie je reťazcom, vyhodí výnimku (prázdny sa považuje za nenastavený, takže platí app.name) a rovnako aj názov tabuľky či stĺpca, ktorý nie je reťazcom — prázdny dostane predvolenú hodnotu.

## Enumy v pozadí

Textové hodnoty sú podložené enumami, takže neznáma hodnota zlyhá hneď pri načítaní — nikdy nedôjde k tichému zníženiu sily hašu:

```php
use RoundlyConsulting\Crypto\Otp\OtpAlgorithm;              // Sha1, Sha256, Sha512 — backs `algorithm`
use RoundlyConsulting\TwoFactor\Enums\RecoveryCodeStorage;  // Encrypted, Hashed; cast(); ::fromConfig()
use RoundlyConsulting\TwoFactor\Enums\ReplayGuardMode;      // Column, Cache, None; ::fromConfig() (null → None)
use RoundlyConsulting\TwoFactor\Enums\TwoFactorMethod;      // Totp ('totp'), RecoveryCode ('recovery_code')
```

## Prostredie (env)

Tri kľúče sa čítajú z premenných prostredia:

```bash
TWO_FACTOR_ISSUER="Acme"
TWO_FACTOR_CACHE_STORE=redis
TWO_FACTOR_TABLE=users
```

## Kontrola konfigurácie

Balík pridáva sekciu do php artisan about. Zobrazí algoritmus, dĺžku a periódu kódu, toleranciu posunu, dĺžku tajného kľúča, či je nastavený vydavateľ, počet a režim ukladania záložných kódov, replay guard, limit pokusov a či je mapa stĺpcov predvolená alebo upravená — nikdy nie tajný kľúč, záložný kód, samotného vydavateľa ani názov úložiska cache:

```bash
php artisan about --only=two-factor
```

Hodnoty sa čítajú priamo, takže sekcia sa zobrazí aj pri chybnej konfigurácii. Prípad enumu sa zobrazí ako jeho hodnota; hodnota nesprávneho typu — alebo v číselnom riadku reťazec, ktorý nie je celým číslom, napríklad '6abc' či '1.5' — sa v riadku zobrazí ako invalid (<type>), nikdy nie ako predvolená hodnota či pretypované číslo. Číslo mimo rozsahu sa zobrazí tak, ako je.

## 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/two-factor-for-laravel.md)
