Konfigurácia
Všetko je v config/authentication.php. Kľúče najvyššej úrovne sú globálne. Všetko pod defaults platí pre každý guard a dá sa prepísať v guards.<name> — asociatívne polia sa zlučujú rekurzívne, zoznamy sa nahrádzajú celé (identifier.columns = ['username'] nahradí ['email'], nezlučuje sa podľa indexu).
php artisan vendor:publish --tag=authentication-config'guards' => [
'users' => ['model' => App\Models\User::class],
'clients' => [
'model' => App\Models\Client::class,
'login' => ['password' => false, 'magic_link' => true, 'passkey' => true],
'two_factor' => ['mode' => 'off'],
'passkeys' => ['mode' => 'optional', 'second_factor' => 'off'],
'registration' => ['mode' => 'open'],
'routes' => ['enabled' => true, 'prefix' => 'clients/auth'],
],
],Každý guard je izolovaný: vlastný model a tabuľka, vlastná JWT audience, vlastný typ vlastníka refresh tokenov, vlastné kľúče limitov, vlastné záznamy aktivity a vlastné routy. Dva guardy nemôžu zdieľať model (rola v jednej tabuľke je autorizácia, nie guard) ani audience.
Globálne kľúče
| Kľúč | Predvolené | Env | Účel |
|---|---|---|---|
default | users | AUTHENTICATION_GUARD | Guard, ktorý použije Authentication::guard() bez názvu. |
key_type | bigint | AUTHENTICATION_KEY_TYPE | Typ primárneho kľúča všetkých modelov guardov (bigint, uuid, ulid — prázdna hodnota ponechá bigint, iná hodnota vyhodí InvalidConfigurationException); musí sa zhodovať s passkeys.key_type a refresh-tokens.key_type. |
hash_key | odvodený z APP_KEY | AUTHENTICATION_HASH_KEY | HMAC kľúč pre odkazy, kódy, tokeny výziev, odtlačky a kľúče limitov; jeho rotácia zneplatní všetky nevyužité tajomstvá. |
tables.* | auth_* | AUTHENTICATION_*_TABLE | Názvy tabuliek: challenges, one_time_tokens, invitations, login_activities. |
models.* | modely balíka | — | Vymeniteľné modely — trieda balíka alebo jej podtrieda; akákoľvek iná trieda vyhodí InvalidConfigurationException s názvom kľúča. |
columns.* | rovnaké názvy | — | Názvy stĺpcov v tabuľke každého guardu (token_version, locale, timezone, password, password_changed_at, email_verified_at, last_login_at, disabled_at, disabled_reason, locked_until, failed_login_count). |
reauthentication_store | predvolený store | AUTHENTICATION_REAUTH_STORE | Cache store pre značky „nedávno opätovne overený“. |
Kľúče guardu (defaults.*)
Každý prepínač zapnuté/vypnuté prijíma bežné zápisy z env — true/false, 1/0, on/off, yes/no — takže AUTHENTICATION_LOGIN_PASSWORD=off prihlásenie heslom naozaj vypne. Kľúč, ktorý nie je nastavený — chýba, je null alebo je prázdny (prázdny reťazec či medzery, čo dá riadok KEY= v .env) —, sa číta ako uvedená predvolená hodnota; čokoľvek iné (preklep ako disabled) vyhodí pri načítaní guardu AuthenticationMisconfigured s názvom kľúča a authentication:check ho vypíše. Rovnako striktné sú aj dvojhodnotové reťazcové kľúče (identifier.normalize, risk.deny_response) a kľúče režimov (two_factor.mode, registration.mode, notifications.delivery, …): prázdna hodnota použije predvolenú hodnotu balíka, preklep vyhodí výnimku.
| Kľúč | Predvolené | Účel |
|---|---|---|
model | — (povinné) | Model guardu: class-string<Model&Account>. |
laravel_guard | názov guardu | Záznam v auth.guards (jwt guard), cez ktorý sa guard overuje. |
identifier.columns | ['email'] | Stĺpce akceptované ako prihlasovací identifikátor, skúšané v poradí. |
identifier.email_column | Stĺpec s e-mailovou adresou — sem HasAuthentication smeruje aj e-maily (routeNotificationForMail()). | |
identifier.normalize | lowercase | lowercase alebo none; e-maily sa ukladajú aj vyhľadávajú normalizované (vždy v Unicode zloženom tvare, NFC). |
identifier.case_insensitive_lookup | false | lower(col) = ? pre staré záznamy so zmiešanou veľkosťou písmen (nevyužije index). |
login.password / .magic_link / .email_otp / .passkey | true / false / false / false | Zapnuté spôsoby prihlásenia (env AUTHENTICATION_LOGIN_*). |
login.reveal_account_state | true | Kódy pre deaktivovaný/neoverený účet po overenom prvom faktore; false z nich spraví invalid_credentials. |
challenge.ttl / .enrolment_ttl | 300 / 900 | Platnosť výzvy v sekundách (dlhšia, kým čaká krok nastavenia faktora). |
challenge.max_attempts | 5 | Počet neúspešných krokov, po ktorých výzva zanikne (pokus sa započíta ešte pred overením kódu; platný kód ho vráti). |
challenge.allow_enrolment | true | Povoliť vynútené nastavenie faktora vo výzve. |
challenge.enrolment_requires_verified_email | true | …len pre overené adresy. |
challenge.bind.user_agent / .ip / .device_header | true / false / true | Viazanie výzvy na zariadenie. |
challenge.max_active_per_account | 3 | Staršie aktívne výzvy sa nahradia. |
two_factor.mode | optional | off, optional alebo required (env AUTHENTICATION_TWO_FACTOR). |
two_factor.after_email_login | true | Aj prihlásenie magic linkom, e-mailovým kódom a pozvánkou vyžaduje druhý faktor; false ich vyníma z pravidiel dvojfaktora, nikdy nie z dodatočného overenia pri riziku (registrácia nie je výnimkou nikdy). |
two_factor.required_with_passkey | false | Pri required si aj prihlásenie passkey vynúti nastavenie TOTP. |
two_factor.passkey_satisfies_required | true | Passkey ako druhý faktor splní required. |
two_factor.issuer | null | otpauth issuer pre guard (null → issuer z two-factor alebo názov aplikácie). |
two_factor.qr.enabled / .size | true / 240 | QR kód na nastavenie TOTP. |
passkeys.mode | optional | off, optional alebo required (env AUTHENTICATION_PASSKEYS). |
passkeys.second_factor | allowed | off, allowed, required_when_enrolled alebo required. |
passkeys.satisfies_mfa | true | Prihlásenie passkey bez hesla s overením používateľa už nevyžaduje ďalší faktor (overenie používateľa sa potom vynúti pri každom ceremoniáli) — ani pri dodatočnom overení kvôli riziku; pri false si dodatočné overenie vyžiada TOTP. |
tokens.access_ttl | null | Sekundy; null → jwt.ttl. |
tokens.refresh_ttl / .refresh_absolute_ttl | 30 / 90 dní | Posuvná a absolútna platnosť refresh tokenu (0 = bez limitu). |
tokens.claims_resolver | DefaultClaimsResolver | Implementácia ResolvesAccessTokenClaims. |
tokens.include_email | true | Pridá claimy email a email_verified. |
sessions.max_active | null | Nad limitom sa zrušia najstaršie relácie. |
invalidation.* | others / all / others / others / none | password_changed, password_reset, email_changed, two_factor_changed, passkey_changed → none, others alebo all (deaktivácia, odhlásenie všade a incidenty sú vždy all). |
registration.mode | closed | open, invite_only alebo closed (env AUTHENTICATION_REGISTRATION); closed odmietne aj prijatie pozvánky — na registráciu len cez pozvánky použite invite_only. |
registration.require_password | true | Vyžadovať heslo, ak je zapnuté prihlásenie heslom. |
registration.login_after | true | Prihlásiť hneď po registrácii. |
registration.rules | null | ProvidesRegistrationRules pre vlastné polia (ku creatoru sa dostanú len tieto kľúče). |
registration.creator | CreateAccount | Implementácia CreatesAccounts. |
invitations.enabled | false | Pozvánky (invite_only ich vyžaduje); kým sú vypnuté, každé volanie invitations() vyhodí LoginMethodDisabled (404 method_disabled). |
invitations.ttl | 7 dní | Platnosť pozvánky. |
invitations.lock_email | true | Pozvaný musí použiť pozvanú adresu. |
invitations.replace_pending | true | Nová pozvánka zruší čakajúcu pozvánku pre tú istú adresu. |
invitations.allow_existing_email | false | Pozývať adresy, ktoré už majú účet. |
invitations.resend_cooldown / .max_sends | 60 / 5 | Limity opätovného odoslania — počítajú len odoslané e-maily (send: false a link() sa nerátajú). |
invitations.preview_payload_keys | [] | Kľúče payloadu, ktoré zobrazí endpoint náhľadu. |
invitations.ability | authentication.invitations.manage | Gate ability pre routy správy pozvánok. |
verification.mode | optional | off, optional, required_for_actions alebo required_for_login (env AUTHENTICATION_VERIFICATION). |
verification.channel | link | link alebo code. |
verification.ttl / .code_length / .max_attempts | 1 deň / 6 / 5 | Tajomstvá overenia. |
verification.resend_decay | 60 | Pauza medzi opätovnými odoslaniami pre účet v sekundách. |
verification.verify_on_email_login | true | Prihlásenie magic linkom alebo e-mailovým kódom adresu overí. |
email_change.enabled / .ttl / .notify_old / .require_reauthentication | true / 1 h / true / true | Overená zmena e-mailu (require_reauthentication = false vypne jej bránu; inak rozhoduje required_for). |
magic_link.ttl / .same_device | 15 min / false | Magic linky (same_device ich viaže na žiadajúce zariadenie). |
email_otp.ttl / .length / .max_attempts | 10 min / 6 / 5 | E-mailové kódy (aj kódy opätovného overenia). |
passwords.reset.enabled / .ttl / .login_after | true / 1 h / false | Obnova hesla. |
passwords.change.enabled | true | Endpoint na zmenu hesla. |
passwords.rehash_on_login | true | Pri prihlásení prehašovať zastarané hashe. |
passwords.policy.min / .max | 10 / 128 | Dĺžka (pri bcrypt vynútené max. 72 bajtov). |
passwords.policy.letters / .mixed_case / .numbers / .symbols | false | Pravidlá zloženia. |
passwords.policy.not_identifier | true | Nesmie obsahovať lokálnu časť e-mailu. |
passwords.policy.uncompromised.* | false / 0 / 3 / false | Kontrola uniknutých hesiel: enabled, threshold, timeout, fail_closed (env AUTHENTICATION_PASSWORD_BREACH_CHECK). |
throttle.<kind>.max / .decay | viď konfiguráciu | Desať limitov — viď Aktivita a riziko. |
lockout.enabled / .threshold / .duration / .reset_unlocks | false / 10 / 900 / true | Voliteľné tvrdé uzamknutie. |
reauthentication.timeout | 900 | Ako dlho platí opätovné overenie, v sekundách. |
reauthentication.methods | všetkých päť | Povolené metódy. |
reauthentication.require_second_factor_when_enrolled | true | Účty s druhým faktorom ho musia použiť — pri opätovnom overení aj na to, aby bránu splnilo opätovné overenie či čerstvé prihlásenie (podľa faktorov, ktoré účet má práve teraz). |
reauthentication.fresh_login_counts | true | Prihlásenie v rámci okna sa započíta — pri účte s druhým faktorom len prihlásenie, ktoré ho použilo (amr obsahuje mfa alebo hwk). |
reauthentication.required_for | všetkých osem akcií | Hodnoty SensitiveAction, ktoré vyžadujú nedávne opätovné overenie. |
activity.enabled / .store_identifier / .retention_days | true / plain / 90 | Záznam prihlasovacej aktivity (plain, hash alebo none). |
activity.new_device.enabled / .header / .skip_first_login | true / X-Device-Id / true | Detekcia nového zariadenia. |
risk.assessor / .reactions.elevated / .reactions.high / .deny_response | null / notify / require_second_factor / uniform | Háčiky na hodnotenie rizika (allow, notify, require_second_factor, deny); dodatočné overenie platí pre každý spôsob prihlásenia a účet bez faktora, ktorým by sa overil, zamietne. |
locale.header / .supported / .store_on_registration / .fill_on_login / .timezone | X-Locale / [app.locale] / true / true / true | Jazyk a časové pásmo. |
notifications.delivery / .connection / .queue | after_response / null / null | sync, after_response alebo queue (env AUTHENTICATION_NOTIFICATION_*). |
notifications.classes.* | triedy balíka | 18 tried notifikácií; null jednu vypne. |
notifications.frontend_url | app.url | {frontend} v šablónach URL (env AUTHENTICATION_FRONTEND_URL). |
notifications.urls.* | {frontend}/auth/…?guard={guard}#token={token} | Šablóny odkazov v e-mailoch (env AUTHENTICATION_URL_*). |
routes.enabled / .prefix / .name | false / {guard}/auth / authentication.{guard}. | Voliteľné routy. |
routes.middleware / .authenticated_middleware / .invitations_management | ['api'] / [] / false | Middleware rout a routy správy pozvánok. |
resources.account | AccountResource | Resource pre me. |
Striktné čítanie
Rovnako striktne sa čítajú aj všetky ostatné kľúče a kontrolujú sa pri načítaní guardu:
- Celé čísla (platnosti, limity pokusov, limity požiadaviek, dĺžky) prijímajú int alebo kanonický reťazec s celým číslom, takže five či 1.5 vyhodí výnimku, namiesto toho, aby sa prečítala ako predvolená (prázdna hodnota sa považuje za nenastavenú, takže platí predvolená) — a rovnako aj hodnota mimo rozsahu: platnosti a limity najmenej 1, email_otp.length a verification.code_length 6–8, pokusy o kód 1–100, passwords.policy.max najmenej policy.min.
- 0 sa prijme len tam, kde má význam: tokens.refresh_absolute_ttl (bez limitu), invitations.resend_cooldown, verification.resend_decay a passwords.policy.uncompromised.threshold. tokens.access_ttl a sessions.max_active sú null alebo prázdne (TTL z jwt / bez limitu) alebo najmenej 1.
- Reťazcové kľúče s predvolenou hodnotou (identifier.email_column, invitations.ability, activity.new_device.header, routes.prefix, routes.name, každá šablóna notifications.urls.*) vyhodia výnimku, ak nie sú reťazcom, a prázdnu hodnotu čítajú ako nenastavenú → predvolená hodnota; voliteľné (laravel_guard, two_factor.issuer, fronty, frontend_url, class-stringy) vyhodia výnimku, ak nie sú reťazcom, a prázdnu hodnotu čítajú ako nenastavenú → bez hodnoty.
- Zoznamové kľúče (identifier.columns, routes.middleware, locale.supported …) musia byť zoznamy neprázdnych reťazcov — chybná položka vyhodí výnimku, nikdy sa potichu nevynechá.
Globálne názvy tables.* a columns.* vyhodia výnimku, ak nie sú reťazcom, a prázdnu hodnotu čítajú ako nenastavenú → názov z balíka; default číta prázdnu hodnotu ako users; hash_key a reauthentication_store vyhodia výnimku, ak nie sú reťazcom (prázdna hodnota je nenastavená → odvodený kľúč / predvolený store).
Prostredie (env)
Bežné prepínače sú riadené cez env (prepínače zapnuté/vypnuté sa čítajú ako boolean):
AUTHENTICATION_GUARD=users
AUTHENTICATION_KEY_TYPE=bigint
AUTHENTICATION_HASH_KEY=
AUTHENTICATION_USERS_MODEL=App\Models\User
# on/off switches accept true/false, 1/0, on/off, yes/no
AUTHENTICATION_LOGIN_PASSWORD=true
AUTHENTICATION_LOGIN_MAGIC_LINK=off
AUTHENTICATION_LOGIN_EMAIL_OTP=off
AUTHENTICATION_LOGIN_PASSKEY=off
AUTHENTICATION_TWO_FACTOR=optional
AUTHENTICATION_PASSKEYS=optional
AUTHENTICATION_REGISTRATION=closed
AUTHENTICATION_VERIFICATION=optional
AUTHENTICATION_PASSWORD_BREACH_CHECK=false
AUTHENTICATION_NOTIFICATION_DELIVERY=after_response
AUTHENTICATION_FRONTEND_URL=https://app.example.comValidácia
Guard sa validuje pri prvom použití — prvý problém vyhodí AuthenticationMisconfigured s názvom kľúča a php artisan authentication:check vypíše všetky naraz. Pravidlá zahŕňajú:
- Model existuje, je to Eloquent model a implementuje Account.
- Zapnuté 2FA vyžaduje TwoFactorAuthenticatable; zapnuté passkeys (alebo prihlásenie passkey) vyžadujú HasPasskeys.
- Aspoň jeden spôsob prihlásenia je zapnutý; invite_only vyžaduje invitations.enabled.
- Vynútené nastavenie faktora s enrolment_requires_verified_email vyžaduje verification.mode iné ako off.
- laravel_guard je jwt guard, ktorého token_version je TokenVersionResolver.
- authentication.key_type sa zhoduje s passkeys.key_type aj refresh-tokens.key_type a zodpovedá mu kľúč modelu.
- Pri viacerých guardoch: odlišné laravel_guardy, morph triedy modelov aj JWT audience.
- Každý prepínač, enum, celé číslo, reťazec aj zoznam sa načíta bez chyby (pozrite Striktné čítanie vyššie), takže preklep zlyhá už pri načítaní guardu — nikdy nie uprostred toku.
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.