---
title: "Overovanie — Contacts for Laravel | Roundly"
description: "Vydajte kód alebo token uložený len ako hash s expiráciou a limitom pokusov, doručte ho z udalosti a potvrdením overte kontakt."
url: https://roundly-consulting.com/sk/open-source/navody/contacts-for-laravel/overovanie
language: sk
---

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

[Contacts for Laravel](https://roundly-consulting.com/sk/open-source/navody/contacts-for-laravel.md)

# Overovanie

Balík vygeneruje overovací token, uloží len jeho hash a expiráciu a spustí udalosť s otvoreným textom, aby ho vaša aplikácia doručila vlastným kanálom — e-mailom, SMS alebo čímkoľvek iným. Balík sám nikdy nič neodosiela. Overovanie obsluhuje Contacts::verification(); metódy modelu requestVerification() a confirmVerification() sú skratky pre tie isté volania:

```php
use RoundlyConsulting\Contacts\Facades\Contacts;

// Generate a token and dispatch ContactVerificationRequested($contact, $plainToken).
$token = Contacts::verification()->request($contact);   // or $contact->requestVerification()

// Later, confirm with the token the user supplied.
Contacts::verification()->confirm($contact, $token);     // or $contact->confirmVerification($token)
// On success: verified_at is set, token fields cleared, ContactVerified fires.
```

## Doručenie tokenu

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Contacts\Events\ContactVerificationRequested;

Event::listen(function (ContactVerificationRequested $event): void {
    // $event->contact, $event->plainToken — send your own mail/SMS here.
});
```

Otvorený text je označený #\[SensitiveParameter\], takže sa nikdy neobjaví v stack trace — a keďže fasáda Contacts používa RedactsSensitiveArguments z package-toolkit, nezostane v otvorenej podobe ani vo vlastnom rámci fasády, keď volanie ide cez ňu. Nová požiadavka nahradí predchádzajúci token a verification\_token je pri serializácii modelu skrytý.

## Potvrdenie

Potvrdenie vyhodí InvalidVerificationToken (nesprávny, chýbajúci alebo zneplatnený token) alebo VerificationExpired (po uplynutí TTL). Obe rozširujú ContactException. VerificationAttemptsExceeded je podtrieda InvalidVerificationToken, preto ju zachyťte ako prvú, ak chcete samostatné hlásenie. Potvrdenie už overeného kontaktu ho vráti nezmenený:

```php
use RoundlyConsulting\Contacts\Exceptions\InvalidVerificationToken;
use RoundlyConsulting\Contacts\Exceptions\VerificationAttemptsExceeded;
use RoundlyConsulting\Contacts\Exceptions\VerificationExpired;
use RoundlyConsulting\Contacts\Facades\Contacts;

try {
    Contacts::verification()->confirm($contact, $request->string('code')->toString());
} catch (VerificationAttemptsExceeded) {
    // the last attempt is spent and the code is void — catch it before its parent
    return back()->withErrors(['code' => 'Too many wrong codes. Request a new one.']);
} catch (InvalidVerificationToken) {
    return back()->withErrors(['code' => 'That code is not valid.']);
} catch (VerificationExpired) {
    return back()->withErrors(['code' => 'That code has expired. Request a new one.']);
}
```

## Limit pokusov

Každý token prežije verification.max\_attempts (predvolene 5) nesprávnych pokusov. Pokus, ktorý minie posledný, token zneplatní a vyhodí VerificationAttemptsExceeded — vtedy si vyžiadajte nový token. Počet sa ukladá v databáze, takže paralelné požiadavky zdieľajú jeden limit, a token po expirácii pokus nemíňa. Nové request() začne s novým limitom, preto obmedzte, ako často môže používateľ token žiadať — dobre poslúži RateLimiter z Laravelu.

## Overenie patrí jednej hodnote

Zmena hodnoty alebo druhu kontaktu — cez update(), sync() alebo priamy $contact->update(\[...\]) — vymaže verified\_at a zneplatní čakajúci token, takže token poslaný na starú adresu nikdy nepotvrdí novú. Zápis, ktorý sám nastaví verified\_at, napríklad import, sa zachová:

```php
use RoundlyConsulting\Contacts\DataTransferObjects\ContactData;
use RoundlyConsulting\Contacts\Enums\ContactType;
use RoundlyConsulting\Contacts\Facades\Contacts;

$contact->isVerified();   // true

$updated = Contacts::update($contact, new ContactData(ContactType::Email, 'new@example.com'));
$updated->isVerified();   // false — and any pending token is void

$contact->update(['value' => 'other@example.com']);   // a direct write drops it too
```

request() vydá token pre kontakt tak, ako je uložený, pod zámkom jeho riadku. Kópia načítaná pred zmenou hodnoty sa najprv obnoví, takže ContactVerificationRequested nesie hodnotu, ktorú kód dokáže overiť — kód doručený na starú hodnotu nikdy nepotvrdí novú. Neuložené zmeny na odovzdanej kópii sa neuložia.

## Kód alebo token

Pri štýle code (predvolený) dostanete číselný kód s code\_length číslicami (1 – 72), generovaný číslicu po číslici, takže môže začínať nulou. Pri štýle token dostanete token\_length náhodných bajtov (1 – 36) v hex kódovaní — bcrypt číta len prvých 72 znakov, preto dlhšie nastavenie vyhodí výnimku namiesto čiastočnej kontroly:

```bash
CONTACTS_VERIFICATION_STYLE=token      # 'code' (digits) or 'token' (hex)
CONTACTS_VERIFICATION_TTL=15           # minutes
CONTACTS_VERIFICATION_TOKEN_LENGTH=32  # bytes -> a 64-character hex string (1-36)
CONTACTS_VERIFICATION_MAX_ATTEMPTS=5   # wrong guesses before the token is voided
```

## Priame označenie ako overený

Ak je vlastníctvo už preukázané inak — e-mail z OAuth, kontrola administrátorom — tokenový postup preskočte:

```php
Contacts::verification()->markVerified($contact);                   // now (idempotent)
Contacts::verification()->markVerified($contact, now()->subDay());   // ...or at a given moment

$contact->isVerified();                            // true
Contact::query()->verified()->get();               // verified contacts
Contact::query()->verified(false)->get();          // unverified contacts
Contact::query()->pendingVerification()->get();    // unverified, token issued
```

Factory obsahuje stav pendingVerification() zodpovedajúci scopu pendingVerification() — pozrite Testovanie.

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