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):
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.
- Skryje token_version, locked_until, disabled_reason a failed_login_count pri serializácii.
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:
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();
});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á:
$accounts = Authentication::guard('users')->accounts();
$accounts->findForLogin('[email protected]'); // tries identifier.columns in order
$accounts->findByEmail('[email protected]'); // ?Account
$accounts->findByKey(42); // ?Account
$accounts->emailTaken('[email protected]'); // includes soft-deleted accountsŽivotný cyklus účtu
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}.
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.