NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Auth for Laravel

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ódaVracia
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 kryptomien

Odoslaní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.