Overovanie pri prihlásení
Po overení hesla skontrolujte kód, ktorý používateľ zadá. TwoFactor::for($user)->attempt() prijme TOTP kód aj záložný kód a vráti VerificationResult:
use RoundlyConsulting\TwoFactor\Exceptions\TwoFactorRateLimitedException;
use RoundlyConsulting\TwoFactor\Facades\TwoFactor;
try {
$result = TwoFactor::for($user)->attempt($request->string('code')->toString());
} catch (TwoFactorRateLimitedException $e) {
// too many failed attempts — retry after $e->secondsUntilAvailable seconds
}
if ($result->verified) {
// accepted — TOTP (replay-safe) or a single-use recovery code
}Ako používateľ overením prešiel
Výsledok prezradí, či kód prešiel, akou metódou a koľko záložných kódov ešte zostáva:
use RoundlyConsulting\TwoFactor\Enums\TwoFactorMethod;
use RoundlyConsulting\TwoFactor\Facades\TwoFactor;
$result = TwoFactor::for($user)->attempt($request->string('code')->toString());
$result->verified; // bool — TOTP (replay-safe) or a single-use recovery code
$result->method; // TwoFactorMethod::Totp | ::RecoveryCode | null on failure
$result->remainingRecoveryCodes; // int, after this attempt — "1 recovery code left"
$result->replayed; // true when a valid code's timestep was already used
if ($result->method === TwoFactorMethod::RecoveryCode) {
// e.g. notify the user, add 'recovery_code' to an amr claim
}| Vlastnosť | Typ | Význam |
|---|---|---|
verified | bool | Kód prešiel — TOTP (odolný voči opakovaniu) alebo jednorazový záložný kód. |
method | ?TwoFactorMethod | Totp alebo RecoveryCode; null, ak overenie neprešlo. |
remainingRecoveryCodes | int | Počet záložných kódov, ktoré zostávajú po tomto pokuse. |
replayed | bool | Platný TOTP kód, ktorého časový krok už bol použitý. |
Počet zostávajúcich kódov po použití záložného kódu sa číta z riadku uzamknutého počas spotreby, takže je správny aj pri súbehu dvoch požiadaviek.
Poradie kontrol
- Používateľ bez potvrdenej aktivácie zlyhá okamžite — čakajúca aktivácia nikdy nie je platný druhý faktor.
- Pokus sa najprv započíta do vstavaného limitera, jedným atomickým zvýšením. Po prekročení attempts.max sa vyhodí TwoFactorRateLimitedException ešte pred akýmkoľvek overovaním.
- TOTP kód sa overí v rámci tolerancie posunu; pri zhode sa jeho časový krok atomicky zaberie. Už zabratý krok znamená opakovanie — výsledok má replayed: true a vyvolá sa TwoFactorReplayDetected.
- Inak sa kód skúsi ako jednorazový záložný kód — normalizovaný tak, ako ho ľudia píšu — a pri zhode sa spotrebuje.
- Úspech vynuluje počítadlo limitera a vyvolá TwoFactorVerified. Zlyhanie aj opakovanie zostávajú započítané; skutočné zlyhanie navyše vyvolá TwoFactorVerificationFailed.
Priamo z modelu používateľa
Dve skratky traitu spúšťajú to isté attempt(): jedna vráti výsledok, druhá len bool:
$result = $user->attemptTwoFactorCode($code); // → VerificationResult (== TwoFactor::for($user)->attempt())
$ok = $user->verifyTwoFactorCode($code); // bool (== ->attempt($code)->verified)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.