Nastavenie modelu
Implementujte kontrakt, použite trait a rozbaľte twoFactorCasts() do castov modelu:
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\TwoFactor\Concerns\HasTwoFactorAuthentication;
use RoundlyConsulting\TwoFactor\Contracts\TwoFactorAuthenticatable;
final class User extends Authenticatable implements TwoFactorAuthenticatable
{
use HasTwoFactorAuthentication;
protected function casts(): array
{
return [
// ...your other casts
...$this->twoFactorCasts(),
];
}
}twoFactorCasts() nastaví encrypted pre tajný kľúč, datetime pre confirmed_at a pre záložné kódy array (režim hashed, predvolený) alebo encrypted:array (režim encrypted). Názvy stĺpcov sa vždy čítajú z two-factor.columns, takže upravená schéma funguje bez ďalších zásahov.
Skryté pri serializácii
Trait automaticky pridá stĺpce tajného kľúča, záložných kódov a posledného časového kroku do $hidden modelu, takže vrátenie používateľa z routy nikdy neprezradí dešifrovaný kľúč ani kódy:
return $user; // from a route — no secret, no recovery codes
$user->toArray(); // two_factor_secret, two_factor_recovery_codes and
$user->toJson(); // two_factor_last_used_timestep are always hidden
$user->two_factor_confirmed_at; // stays visible for UI statePomocné metódy stavu
$user->hasTwoFactorEnabled(); // secret set + confirmed
$user->hasPendingTwoFactor(); // secret set, not yet confirmed
$user->twoFactorSecret(); // ?string
$user->twoFactorRecoveryCodes(); // list<string>
$user->twoFactorRecoveryCodesRemaining(); // int
$user->twoFactorLabel(); // provisioning label (email → primary key)Aktivovaný používateľ má tajný kľúč aj čas potvrdenia confirmed_at; čakajúci používateľ má tajný kľúč, ale ešte ho nepotvrdil. Overením pri prihlásení môže prejsť len aktivovaný používateľ. V režime hashed vracia twoFactorRecoveryCodes() uložené haše, nie čitateľné kódy. Celý stav naraz získate cez TwoFactor::for($user)->status() — pozrite Fasáda TwoFactor.
Označenie účtu v URI
Označenie v URI otpauth:// je predvolene atribút email, inak primárny kľúč. Ak ho chcete odvodiť od používateľského mena či telefónu, prepíšte twoFactorLabel():
final class User extends Authenticatable implements TwoFactorAuthenticatable
{
use HasTwoFactorAuthentication;
// Key the otpauth:// label on a username instead of the email.
public function twoFactorLabel(): string
{
return $this->username;
}
}Stĺpce v databáze
| Stĺpec (predvolený názov) | Typ | Poznámka |
|---|---|---|
two_factor_secret | text, nullable | Šifrovaný base32 tajný kľúč. Skrytý pri serializácii. |
two_factor_recovery_codes | text, nullable | Hašovaný (predvolene) alebo šifrovaný zoznam kódov. Skrytý pri serializácii. |
two_factor_confirmed_at | timestamp, nullable | Nastaví sa pri potvrdení aktivácie. Zostáva viditeľný pre stav v UI. |
two_factor_last_used_timestep | unsignedBigInteger, nullable | Číta a zapisuje ho replay guard column. Skrytý pri serializácii. |
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.