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

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
defaultusersAUTHENTICATION_GUARDGuard, ktorý použije Authentication::guard() bez názvu.
key_typebigintAUTHENTICATION_KEY_TYPETyp 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_keyodvodený z APP_KEYAUTHENTICATION_HASH_KEYHMAC 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_*_TABLENá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_storepredvolený storeAUTHENTICATION_REAUTH_STORECache 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_guardnázov guarduZá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_columnemailStĺpec s e-mailovou adresou — sem HasAuthentication smeruje aj e-maily (routeNotificationForMail()).
identifier.normalizelowercaselowercase alebo none; e-maily sa ukladajú aj vyhľadávajú normalizované (vždy v Unicode zloženom tvare, NFC).
identifier.case_insensitive_lookupfalselower(col) = ? pre staré záznamy so zmiešanou veľkosťou písmen (nevyužije index).
login.password / .magic_link / .email_otp / .passkeytrue / false / false / falseZapnuté spôsoby prihlásenia (env AUTHENTICATION_LOGIN_*).
login.reveal_account_statetrueKódy pre deaktivovaný/neoverený účet po overenom prvom faktore; false z nich spraví invalid_credentials.
challenge.ttl / .enrolment_ttl300 / 900Platnosť výzvy v sekundách (dlhšia, kým čaká krok nastavenia faktora).
challenge.max_attempts5Poč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_enrolmenttruePovoliť vynútené nastavenie faktora vo výzve.
challenge.enrolment_requires_verified_emailtrue…len pre overené adresy.
challenge.bind.user_agent / .ip / .device_headertrue / false / trueViazanie výzvy na zariadenie.
challenge.max_active_per_account3Staršie aktívne výzvy sa nahradia.
two_factor.modeoptionaloff, optional alebo required (env AUTHENTICATION_TWO_FACTOR).
two_factor.after_email_logintrueAj 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_passkeyfalsePri required si aj prihlásenie passkey vynúti nastavenie TOTP.
two_factor.passkey_satisfies_requiredtruePasskey ako druhý faktor splní required.
two_factor.issuernullotpauth issuer pre guard (null → issuer z two-factor alebo názov aplikácie).
two_factor.qr.enabled / .sizetrue / 240QR kód na nastavenie TOTP.
passkeys.modeoptionaloff, optional alebo required (env AUTHENTICATION_PASSKEYS).
passkeys.second_factorallowedoff, allowed, required_when_enrolled alebo required.
passkeys.satisfies_mfatruePrihlá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_ttlnullSekundy; null → jwt.ttl.
tokens.refresh_ttl / .refresh_absolute_ttl30 / 90 dníPosuvná a absolútna platnosť refresh tokenu (0 = bez limitu).
tokens.claims_resolverDefaultClaimsResolverImplementácia ResolvesAccessTokenClaims.
tokens.include_emailtruePridá claimy email a email_verified.
sessions.max_activenullNad limitom sa zrušia najstaršie relácie.
invalidation.*others / all / others / others / nonepassword_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.modeclosedopen, 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_passwordtrueVyžadovať heslo, ak je zapnuté prihlásenie heslom.
registration.login_aftertruePrihlásiť hneď po registrácii.
registration.rulesnullProvidesRegistrationRules pre vlastné polia (ku creatoru sa dostanú len tieto kľúče).
registration.creatorCreateAccountImplementácia CreatesAccounts.
invitations.enabledfalsePozvánky (invite_only ich vyžaduje); kým sú vypnuté, každé volanie invitations() vyhodí LoginMethodDisabled (404 method_disabled).
invitations.ttl7 dníPlatnosť pozvánky.
invitations.lock_emailtruePozvaný musí použiť pozvanú adresu.
invitations.replace_pendingtrueNová pozvánka zruší čakajúcu pozvánku pre tú istú adresu.
invitations.allow_existing_emailfalsePozývať adresy, ktoré už majú účet.
invitations.resend_cooldown / .max_sends60 / 5Limity 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.abilityauthentication.invitations.manageGate ability pre routy správy pozvánok.
verification.modeoptionaloff, optional, required_for_actions alebo required_for_login (env AUTHENTICATION_VERIFICATION).
verification.channellinklink alebo code.
verification.ttl / .code_length / .max_attempts1 deň / 6 / 5Tajomstvá overenia.
verification.resend_decay60Pauza medzi opätovnými odoslaniami pre účet v sekundách.
verification.verify_on_email_logintruePrihlásenie magic linkom alebo e-mailovým kódom adresu overí.
email_change.enabled / .ttl / .notify_old / .require_reauthenticationtrue / 1 h / true / trueOverená zmena e-mailu (require_reauthentication = false vypne jej bránu; inak rozhoduje required_for).
magic_link.ttl / .same_device15 min / falseMagic linky (same_device ich viaže na žiadajúce zariadenie).
email_otp.ttl / .length / .max_attempts10 min / 6 / 5E-mailové kódy (aj kódy opätovného overenia).
passwords.reset.enabled / .ttl / .login_aftertrue / 1 h / falseObnova hesla.
passwords.change.enabledtrueEndpoint na zmenu hesla.
passwords.rehash_on_logintruePri prihlásení prehašovať zastarané hashe.
passwords.policy.min / .max10 / 128Dĺžka (pri bcrypt vynútené max. 72 bajtov).
passwords.policy.letters / .mixed_case / .numbers / .symbolsfalsePravidlá zloženia.
passwords.policy.not_identifiertrueNesmie obsahovať lokálnu časť e-mailu.
passwords.policy.uncompromised.*false / 0 / 3 / falseKontrola uniknutých hesiel: enabled, threshold, timeout, fail_closed (env AUTHENTICATION_PASSWORD_BREACH_CHECK).
throttle.<kind>.max / .decayviď konfiguráciuDesať limitov — viď Aktivita a riziko.
lockout.enabled / .threshold / .duration / .reset_unlocksfalse / 10 / 900 / trueVoliteľné tvrdé uzamknutie.
reauthentication.timeout900Ako dlho platí opätovné overenie, v sekundách.
reauthentication.methodsvšetkých päťPovolené metódy.
reauthentication.require_second_factor_when_enrolledtrueÚč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_countstruePrihlá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_forvšetkých osem akciíHodnoty SensitiveAction, ktoré vyžadujú nedávne opätovné overenie.
activity.enabled / .store_identifier / .retention_daystrue / plain / 90Záznam prihlasovacej aktivity (plain, hash alebo none).
activity.new_device.enabled / .header / .skip_first_logintrue / X-Device-Id / trueDetekcia nového zariadenia.
risk.assessor / .reactions.elevated / .reactions.high / .deny_responsenull / notify / require_second_factor / uniformHáč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 / .timezoneX-Locale / [app.locale] / true / true / trueJazyk a časové pásmo.
notifications.delivery / .connection / .queueafter_response / null / nullsync, after_response alebo queue (env AUTHENTICATION_NOTIFICATION_*).
notifications.classes.*triedy balíka18 tried notifikácií; null jednu vypne.
notifications.frontend_urlapp.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 / .namefalse / {guard}/auth / authentication.{guard}.Voliteľné routy.
routes.middleware / .authenticated_middleware / .invitations_management['api'] / [] / falseMiddleware rout a routy správy pozvánok.
resources.accountAccountResourceResource 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.com

Validá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 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.