Fasáda TwoFactor
RoundlyConsulting\TwoFactor\Facades\TwoFactor — automaticky dostupná ako alias TwoFactor — je odporúčaný spôsob práce s balíkom. Všetko, čo číta alebo mení 2FA jedného používateľa, ide cez TwoFactor::for($user); bezstavové TOTP primitíva zostávajú priamo na fasáde.
Handle pre používateľa
use RoundlyConsulting\TwoFactor\Facades\TwoFactor;
$twoFactor = TwoFactor::for($user);
$setup = $twoFactor->start(issuer: 'Acme'); // TwoFactorSetup — begin (or restart) enrolment
$twoFactor->confirm($code); // first authenticator code switches 2FA on
$result = $twoFactor->attempt($code); // VerificationResult — the login challenge
$status = $twoFactor->status(); // TwoFactorStatus
$codes = $twoFactor->recoveryCodes()->regenerate(); // list<string> — show once
$left = $twoFactor->recoveryCodes()->remaining(); // int
$twoFactor->disable(); // clears every 2FA column| TwoFactor::for($user)->… | Vracia | Účel |
|---|---|---|
start(?string $label = null, ?string $issuer = null) | TwoFactorSetup | Spustí (alebo reštartuje) čakajúcu aktiváciu. Vyhodí TwoFactorAlreadyEnabledException. |
confirm(string $code) | void | Potvrdí čakajúcu aktiváciu prvým kódom. Vyhodí TwoFactorNotPendingException alebo InvalidTwoFactorCodeException. |
attempt(string $code) | VerificationResult | Overenie pri prihlásení — limiter, replay guard, záložné kódy. Vyhodí TwoFactorRateLimitedException. |
status() | TwoFactorStatus | Zapnuté, čakajúce, počet záložných kódov a čas potvrdenia jedným čítaním. |
recoveryCodes()->regenerate() | list<string> | Nahradí záložné kódy a raz vráti novú sadu v čitateľnej podobe. |
recoveryCodes()->remaining() | int | Koľko jednorazových záložných kódov zostáva. |
disable() | void | Vymaže všetky dvojfaktorové stĺpce. |
Každý zápis cez handle si svoju akciu vyžiada z kontajnera, takže platia vaše vlastné náhrady akcií aj TwoFactor::fake(). Záložné kódy sú dostupné cez pod-prístup recoveryCodes().
Zistenie stavu
status() vráti TwoFactorStatus s celým stavom naraz — praktické pre obrazovku nastavení:
$status = TwoFactor::for($user)->status();
$status->enabled; // bool — a confirmed second factor
$status->pending; // bool — enrolment started, waiting for its first code
$status->recoveryCodesRemaining; // int
$status->confirmedAt; // ?CarbonImmutable — null unless enabled| Vlastnosť | Typ | Význam |
|---|---|---|
enabled | bool | Potvrdený druhý faktor — tajný kľúč je nastavený a potvrdený. |
pending | bool | Aktivácia spustená, čaká sa na prvý kód. |
recoveryCodesRemaining | int | Počet zostávajúcich jednorazových záložných kódov. |
confirmedAt | ?CarbonImmutable | Kedy bola aktuálna aktivácia potvrdená; null, ak 2FA nie je zapnuté. |
TOTP primitíva
use RoundlyConsulting\TwoFactor\Facades\TwoFactor;
$secret = TwoFactor::generateSecret(); // base32
$code = TwoFactor::currentCode($secret); // current 6-digit code
$step = TwoFactor::verify($secret, $code); // int timestep | false
$uri = TwoFactor::provisioningUri($secret, '[email protected]'); // otpauth:// URI
$codes = TwoFactor::generateRecoveryCodes(); // list<string>| Metóda | Vracia | Účel |
|---|---|---|
for($user) | UserTwoFactor | Handle pre jedného používateľa — všetko, čo číta alebo mení jeho 2FA (ďalšia tabuľka). |
generateSecret(?int $length = null) | string | Base32 tajný kľúč z CSPRNG; dĺžka predvolene podľa secret_length. |
currentCode(string $secret, ?int $timestamp = null) | string | Aktuálny TOTP kód, prípadne kód pre zadaný Unix timestamp. |
verify(string $secret, string $code, ?int $window = null) | int|false | Čistá kontrola podľa RFC 6238 v rámci tolerancie: zhodný časový krok alebo false. Bez replay guardu, záložných kódov a limitera. |
provisioningUri(string $secret, string $label, ?string $issuer = null) | string | URI otpauth:// pre tajný kľúč a označenie účtu. |
generateRecoveryCodes(?int $count = null) | list<string> | Nové kódy v čitateľnej podobe, neukladajú sa; počet predvolene podľa recovery_codes.count. |
fake() | TwoFactorFake | Nahradí službu zaznamenávajúcim testovacím dvojníkom — pozrite Testovanie. |
verify() je čistá kontrola podľa RFC 6238: porovná kód s tajným kľúčom v rámci tolerancie posunu a vráti časový krok, no nič nezaberá, záložné kódy neskúša a limiter nepoužíva. Na overenie pri prihlásení použite TwoFactor::for($user)->attempt().
Každý parameter s tajným kľúčom či kódom je označený #[SensitiveParameter] a overovanie prejde celé okno bez predčasného ukončenia, takže beží v konštantnom čase. Poškodený tajný kľúč vyhodí InvalidBase32Exception; explicitne zadaná dĺžka či okno mimo rozsahu InvalidTwoFactorConfigException.
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.