---
title: "Model účtu — Auth for Laravel | Roundly"
description: "Kontrakt Account, trait HasAuthentication, stĺpce účtu, vyhľadávanie účtov a životný cyklus — deaktivácia, uzamknutie a jazyk."
url: https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel/model-uctu
language: sk
---

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

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

# Model účtu

Model každého guardu implementuje RoundlyConsulting\\Auth\\Contracts\\Account a používa trait HasAuthentication. Presne toto vygeneruje php artisan authentication:guard clients (--no-two-factor / --no-passkeys vynechajú príslušné riadky; premenovaný authentication.columns.password / .email\_verified\_at nahradí daný názov v $hidden aj casts()):

```php
use Illuminate\Auth\Authenticatable as AuthenticatableConcern;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use RoundlyConsulting\Auth\Concerns\HasAuthentication;
use RoundlyConsulting\Auth\Contracts\Account;
use RoundlyConsulting\Passkeys\Concerns\InteractsWithPasskeys;
use RoundlyConsulting\Passkeys\Contracts\HasPasskeys;
use RoundlyConsulting\RefreshTokens\Traits\HasRefreshTokens;
use RoundlyConsulting\TwoFactor\Concerns\HasTwoFactorAuthentication;
use RoundlyConsulting\TwoFactor\Contracts\TwoFactorAuthenticatable;

final class Client extends Model implements Account, HasPasskeys, TwoFactorAuthenticatable
{
    use AuthenticatableConcern;
    use HasAuthentication;
    use HasFactory;
    use HasRefreshTokens;
    use HasTwoFactorAuthentication;
    use InteractsWithPasskeys;
    use Notifiable;
    use SoftDeletes;

    protected $table = 'clients';

    protected $guarded = [];

    protected $hidden = ['password'];

    protected function casts(): array
    {
        return [...$this->authenticationCasts(), ...$this->twoFactorCasts(), 'email_verified_at' => 'datetime'];
    }
}
```

TwoFactorAuthenticatable je povinný, ak 2FA režim guardu nie je off, HasPasskeys, ak sú zapnuté passkeys (alebo prihlásenie passkey) — authentication:check to overí.

## Kontrakt Account

| Metóda | Vracia |
| --- | --- |
| `accountEmail()` | ?string |
| `hasPassword()` | bool |
| `hasVerifiedEmail() / markEmailAsVerified()` | bool |
| `tokenVersion()` | int — claim tv; zvyšuje sa pri invalidácii |
| `isDisabled()` | bool |
| `isLocked()` | bool — locked\_until v budúcnosti |
| `accountLocale() / accountTimezone()` | ?string |

## Trait HasAuthentication

- Implementuje kontrakt nad konfigurovateľnými stĺpcami authentication.columns.\*.
- authenticationCasts() — rozbaľte do casts(): token\_version a failed\_login\_count ako integer; password\_changed\_at, last\_login\_at, disabled\_at a locked\_until ako immutable datetime.
- accountEmailColumn(), lockedUntil() a preferredLocale() — podľa poslednej Laravel lokalizuje notifikácie účtu.
- Pri serializácii skryje stĺpce hesla, token\_version, locked\_until, disabled\_reason a failed\_login\_count pod ich nakonfigurovanými názvami z authentication.columns.\* — premenovaný stĺpec hesla zostane skrytý aj popri štandardnom $hidden = \['password'\].

## Stĺpce účtu

Makro authenticationColumns() pre Blueprint pridá token\_version, locale, timezone, password\_changed\_at, last\_login\_at, disabled\_at, disabled\_reason, locked\_until a failed\_login\_count (zapisuje sa len pri zapnutom uzamknutí). Tabuľka ďalej potrebuje email (unique), email\_verified\_at a password (nullable pre guardy bez hesla) a pri použití aj stĺpce two-factor a passkeys:

```php
Schema::create('clients', function (Blueprint $table) {
    $table->id();
    $table->string('name')->nullable();
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password')->nullable();
    $table->authenticationColumns();
    $table->twoFactorColumns();      // two-factor-for-laravel
    $table->passkeyUserHandle();     // passkeys-for-laravel
    $table->timestamps();
    $table->softDeletes();
});
```

## Statická analýza

Pre Larastan / PHPStan je na Blueprint deklarované makro authenticationColumns(): void. Makro existuje, až keď sa jeho service provider spustí. Larastan spúšťa hostiteľskú aplikáciu s auto-discovery a makro v nej zvyčajne nájde — nie však vtedy, keď sa provider počas analýzy nenačíta: pri vývoji balíka pod Testbench, s dont-discover alebo s ručne registrovaným providerom. Migrácia, ktorá makro volá, by tam inak zlyhala s „Call to an undefined method“. Balík preto obsahuje rozšírenie pre PHPStan (RoundlyConsulting\\Auth\\PHPStan\\AuthenticationMacrosExtension), ktoré phpstan/extension-installer načíta cez extra.phpstan.includes — nič nekonfigurujete. Bez installera ho pridajte ručne:

```yaml
includes:
    - vendor/roundly-consulting/auth-for-laravel/extension.neon
```

Rovnako deklarujú svoje makrá aj two-factor-for-laravel (twoFactorColumns()) a passkeys-for-laravel (passkeyUserHandle()), každý cez vlastný extension.neon.

## Vyhľadávanie účtov

AccountRepository je jediná trieda, ktorá dopytuje model guardu. Soft-deleted účty sa nikdy neprihlásia, no ich adresa zostáva obsadená:

```php
$accounts = Authentication::guard('users')->accounts();

$accounts->findForLogin('ada@example.com');   // tries identifier.columns in order
$accounts->findByEmail('ada@example.com');    // ?Account
$accounts->findByKey(42);                     // ?Account
$accounts->emailTaken('ada@example.com');     // includes soft-deleted accounts
```

## Životný cyklus účtu

```php
use RoundlyConsulting\Auth\DataTransferObjects\LocaleData;
use RoundlyConsulting\Auth\Facades\Authentication;

$users = Authentication::guard('users');

$users->disable($user, 'chargeback fraud');   // every session ends; login and refresh refused
$users->enable($user);

$until = $users->lock($user, 3600);           // blocks new logins, sessions stay; the owner is notified
$users->unlock($user);

$users->updateLocale($user, new LocaleData(locale: 'sk', timezone: 'Europe/Bratislava'));
$users->logoutEverywhere($user);
```

- Deaktivácia — nastaví disabled\_at a disabled\_reason, zneplatní všetko (vždy all) a spustí AccountDisabled. Účet sa už neprihlási ani neobnoví token.
- Uzamknutie — locked\_until = teraz + sekundy (predvolene lockout.duration). Relácie zostávajú; zámok zastaví len nové prihlásenia a vlastník dostane upozornenie ako pri automatickom uzamknutí. Vráti čas odomknutia.
- Jazyk — overí jazyk voči locale.supported aj časové pásmo; spustí LocaleUpdated.
- Odhlásenie všade — zvýši verziu tokenu a zruší všetky relácie; dostupné aj ako php artisan authentication:logout-everywhere {guard} {id}.

Ak administrátora odovzdáte ako actor: (akýkoľvek uložený model), dostane sa do AccountDisabled, AccountEnabled, AccountLocked a AccountUnlocked ako actor, pripravený pre auditný log; lock() navyše vlastníkovi oznámi, že účet uzamkol administrátor. Deaktivácia, aktivácia ani odomknutie e-mail neposielajú. Samotný účet sa za actora nepovažuje; neuložený model vyhodí InvalidArgumentException skôr, než sa čokoľvek zapíše:

```php
Authentication::disable($user, 'chargeback fraud', actor: $admin);
Authentication::lock($user, seconds: 3600, actor: $admin);
Authentication::unlock($user, actor: $admin);
```

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