E-mail a heslá
Jednorazové tajomstvá
Odkazy sú 64-znakové URL-safe tokeny; kódy majú 6 až 8 číslic a sú viazané na jednu adresu. Oboje sa ukladá len ako HMAC s kľúčom, platí len najnovšie tajomstvo daného účelu a otvorená podoba existuje iba v notifikácii.
| Účel | Kľúč platnosti | Druh |
|---|---|---|
magic_link | magic_link.ttl | odkaz |
email_otp | email_otp.ttl, .length, .max_attempts | kód |
reauthentication | zdieľa email_otp.* | kód |
email_verification | verification.ttl, .code_length, .max_attempts | odkaz alebo kód |
password_reset | passwords.reset.ttl | odkaz |
email_change | email_change.ttl | odkaz |
Overenie e-mailu
- off — nič sa neposiela.
- optional — overenie sa pošle, no nevynucuje.
- required_for_actions — prihlásenie je povolené; middleware authentication.verified chráni vaše routy a claim email_verified umožní iným službám kontrolu aj bez spojenia.
- required_for_login — email_not_verified po overenom prvom faktore.
'verification' => [
'mode' => env('AUTHENTICATION_VERIFICATION', 'optional'), // off|optional|required_for_actions|required_for_login
'channel' => 'link', // link|code
'ttl' => 86_400,
'code_length' => 6,
'max_attempts' => 5,
'resend_decay' => 60,
'verify_on_email_login' => true,
],
'email_change' => [
'enabled' => true,
'ttl' => 3_600,
'notify_old' => true,
'require_reauthentication' => true, // false switches the gate off; else reauthentication.required_for decides (change_email)
],Kanálom je odkaz (URL s fragmentom) alebo kód overený cez token a email. Opätovné odoslanie je verejný endpoint, ktorý vždy odpovie 202, s limitmi e-mailových žiadostí a pauzou resend_decay pre účet. Overenie nevydá nové tokeny: zavolajte refresh, aby sa email_verified dostal do prístupového tokenu.
Zmena e-mailu
use RoundlyConsulting\Auth\DataTransferObjects\EmailChangeData;
use RoundlyConsulting\Auth\Facades\Authentication;
$email = Authentication::guard('users')->email();
$email->sendVerification($user); // no-op for verified accounts
// Mails a confirmation link to the NEW address and a heads-up to the old one
$email->requestChange($user, new EmailChangeData('[email protected]', $context));
$email->confirmChange($token, $context); // from the link — returns the accountŽiadosť vyžaduje nedávne opätovné overenie (kým je change_email chránené), pošle potvrdzovací odkaz na novú adresu a — pri notify_old — upozorní starú. Už použitá adresa dostane e-mail o existujúcom účte a odpoveď je rovnaká 202. Potvrdenie zapíše a overí novú adresu, zneplatní všetky nevyužité tajomstvá, použije invalidation.email_changed, pošle e-mail na starú adresu a spustí EmailChanged.
Pravidlá hesiel
'passwords' => [
'reset' => ['enabled' => true, 'ttl' => 3_600, 'login_after' => false],
'change' => ['enabled' => true],
'rehash_on_login' => true,
'policy' => [
'min' => 10,
'max' => 128, // bytes capped at 72 automatically under bcrypt
'letters' => false,
'mixed_case' => false,
'numbers' => false,
'symbols' => false,
'not_identifier' => true,
'uncompromised' => [
'enabled' => env('AUTHENTICATION_PASSWORD_BREACH_CHECK', false),
'threshold' => 0,
'timeout' => 3,
'fail_closed' => false,
],
],
],Pravidlá používajú Laravel pravidlo Password pre dĺžku a zloženie, pri bcrypt vynucujú limit 72 bajtov, odmietajú heslá s lokálnou časťou e-mailu a uplatňujú sa pri každom nastavení hesla.
Kontrola uniknutých hesiel
Po zapnutí sa heslo zahašuje cez SHA-1 a do range API služby Pwned Passwords sa pošle len 5-znakový prefix, s paddingom a 3-sekundovým timeoutom; počet výskytov nad threshold heslo odmietne. Ak služba nie je dostupná, kontrola sa preskočí — alebo pri fail_closed heslo odmietne validačnou chybou (422) — a v oboch prípadoch spustí BreachedPasswordCheckFailed.
Obnova, zmena a nastavenie
use RoundlyConsulting\Auth\DataTransferObjects\ChangePasswordData;
use RoundlyConsulting\Auth\Enums\InvalidationReason;
use RoundlyConsulting\Auth\Facades\Authentication;
$guard = Authentication::guard('users');
$passwords = $guard->passwords();
// Check a candidate against the guard's policy (throws a ValidationException)
$passwords->validate($password, $user);
$passwords->rule($email); // the same policy as a validation rule for your own forms
// Change — the current password is required when the account has one
$tokens = $passwords->change($user, new ChangePasswordData(
currentPassword: $request->input('current_password'),
newPassword: $request->input('password'),
current: $guard->tokenFrom($request),
context: $guard->contextFrom($request),
)); // the re-issued pair for this device — swap to it
// Set — host/admin, invalidation per the given reason
$passwords->set($user, $temporaryPassword, InvalidationReason::Security);- Zabudnuté heslo — obmedzené limitmi; skutočný aktívny účet dostane odkaz na obnovu; odpoveď je vždy 202.
- Obnova — pravidlá sa overia pred spotrebovaním odkazu; potom hash, overenie adresy, odomknutie (reset_unlocks), invalidácia password_reset (all) a notifikácia. Pri reset.login_after prihlásenie vždy prejde nastaveným druhým faktorom.
- Zmena — aktuálne heslo je povinné, ak ho účet má; bez neho ide o nastavenie, ktoré vyžaduje nedávne opätovné overenie. Vráti volajúcemu znovu vydaný pár.
- Nastavenie — pre hostiteľa a administrátorov: pravidlá, hash, invalidácia podľa zadaného dôvodu, udalosť a notifikácia.
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.