Aktivácia
Aktivácia má dva kroky: spustenie čakajúcej aktivácie a jej potvrdenie prvým kódom z autentifikačnej aplikácie používateľa. Kým nie je potvrdená, nič sa nepovažuje za druhý faktor.
Spustenie
use RoundlyConsulting\TwoFactor\Facades\TwoFactor;
$setup = TwoFactor::for($user)->start();
$setup->secret; // base32 secret (store is handled for you)
$setup->provisioningUri; // otpauth://totp/Acme:[email protected]?secret=...&issuer=Acme&...
$setup->recoveryCodes; // list<string> — show these once, they are the only plaintext copy
$setup->issuer; // the issuer the URI carries — show it next to the QR| Vlastnosť | Typ | Obsah |
|---|---|---|
secret | string | Base32 tajný kľúč — už uložený a zašifrovaný. |
provisioningUri | string | URI otpauth://, ktoré vykreslíte ako QR kód. |
recoveryCodes | list<string> | Záložné kódy v čitateľnej podobe — jediná kópia, zobrazte ich raz. |
issuer | string | Vydavateľ uvedený v URI — zobrazte ho vedľa QR kódu. |
start() vygeneruje nový tajný kľúč a záložné kódy, uloží ich s vynulovaným confirmed_at a vyvolá TwoFactorEnrolmentStarted. Opätovné spustenie počas čakajúcej aktivácie ju reštartuje s novým kľúčom aj kódmi; spustenie pri už zapnutom 2FA vyhodí TwoFactorAlreadyEnabledException.
Vydavateľ pre každý guard či tenanta
Vydavateľ je predvolene two-factor.issuer, inak app.name — prázdna hodnota na ktorejkoľvek úrovni sa považuje za nenastavenú. Pri každom volaní ho môžete určiť argumentom issuer — jeden názov pre každý guard či tenanta — a rovnako prepísať aj označenie účtu; URI a $setup->issuer sa vždy zhodujú:
$setup = TwoFactor::for($client)->start(label: '[email protected]', issuer: 'Acme Partner Portal');Potvrdenie
Používateľ naskenuje QR kód a odošle prvý kód, čím aktiváciu dokončí:
TwoFactor::for($user)->confirm($request->string('code')->toString());
// throws InvalidTwoFactorCodeException on a wrong code,
// TwoFactorNotPendingException if there is no pending enrolment — including when 2FA is
// already enabled: a confirm is never a silent no-op, so a clean return always means this
// code just switched 2FA on.Úspešné potvrdenie nastaví confirmed_at, vyvolá TwoFactorConfirmed a v replay guarde zaberie potvrdzujúci časový krok, takže kód použitý na potvrdenie nemôže poslúžiť aj ako prvý prihlasovací kód.
Kód sa overuje voči riadku účtu uzamknutému pre zápis, nikdy nie voči modelu, ktorý odovzdáte — ak sa aktivácia medzitým reštartovala (napríklad v druhej karte), 2FA zapne len kód pre tajný kľúč, ktorý je práve uložený, nikdy nie kód z QR kódu, ktorý už používateľ nemá. Do tohto riadku sa zapíše len confirmed_at; dvojfaktorové stĺpce vášho modelu sa potom zosynchronizujú z neho a ostatné neuložené atribúty modelu zostanú nedotknuté. Kód zadaný s medzerou alebo pomlčkou (123 456, 123-456) sa prijme, ak po ich odstránení zostane presne nastavený počet číslic.
Priamo z modelu používateľa
Rovnaký postup je k dispozícii aj ako metódy traitu, s voliteľným označením účtu a vydavateľom. Delegujú na TwoFactor::for($user), takže ich vidí aj TwoFactor::fake():
$setup = $user->startTwoFactorEnrolment(); // == TwoFactor::for($user)->start()
$setup = $user->startTwoFactorEnrolment('[email protected]', issuer: 'Acme Billing');
$user->confirmTwoFactor($request->string('code')->toString()); // == ->confirm($code)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.