Fasáda Passkeys
Fasáda Passkeys je jediný vstupný bod. Všetko, čo patrí jednému účtu, ide cez Passkeys::for($user), ktorý vráti handle UserPasskeys; prihlásenie bez mena (discoverable) zostáva ploché, pretože účet ešte nepoznáte. Každá ceremónia sú dve volania — pripraviť možnosti pre prehliadač a potom overiť jeho odpoveď:
use RoundlyConsulting\Passkeys\Facades\Passkeys;
// Everything scoped to one account goes through its handle.
$keys = Passkeys::for($user); // UserPasskeys
$keys->registrationOptions($overrides); // CreationOptionsData ($overrides optional)
$keys->register($response, name: 'Laptop'); // Passkey
$keys->authenticationOptions($overrides); // RequestOptionsData bound to this account
$keys->authenticate($response); // Passkey — only this account's credential
$keys->all(); // Collection<Passkey>, newest first
$keys->find($id); // ?Passkey — null for another account's id
$keys->count(); // int
$keys->exists(); // bool
$keys->rename($passkeyOrId, 'Work laptop'); // Passkey — refuses another account's passkey
$keys->revoke($passkeyOrId); // void — refuses another account's passkey
// No account yet: the discoverable (usernameless) login stays flat.
Passkeys::authenticationOptions($overrides); // RequestOptionsData ($overrides optional)
Passkeys::authenticate($response, $expect); // Passkey — $expect optionally holds it to an owner (type)
Passkeys::attestationFormats(); // ['none', 'packed', 'apple']Všetky metódy
| Metóda | Vracia | Čo robí |
|---|---|---|
for($user) | UserPasskeys | Handle účtu — každé volanie na ňom platí len pre $user. |
for($user)->registrationOptions(?$overrides) | CreationOptionsData | Možnosti pre navigator.credentials.create(); uloží jednorazovú challenge. |
for($user)->register($response, ?$name) | Passkey | Overí atestačnú odpoveď a uloží kľúč, voliteľne s názvom. |
for($user)->authenticationOptions(?$overrides) | RequestOptionsData | Možnosti prihlásenia viazané na kľúče tohto účtu. |
for($user)->authenticate($response) | Passkey | Overí podpis a pripustí len kľúč tohto účtu. |
for($user)->all() | Collection<int, Passkey> | Aktívne kľúče účtu, od najnovšieho. |
for($user)->find($id) | ?Passkey | Jeden aktívny kľúč podľa ID (int alebo reťazec) — null pre odvolaný kľúč, ID iného účtu alebo nečíselný reťazec. |
for($user)->count() / exists() | int / bool | Počet aktívnych kľúčov a či existuje aspoň jeden. |
for($user)->rename($passkeyOrId, $name) | Passkey | Premenuje kľúč tohto účtu; spustí PasskeyRenamed. |
for($user)->revoke($passkeyOrId) | void | Zmaže kľúč tohto účtu cez soft delete; spustí PasskeyRevoked. |
authenticationOptions(?$overrides) | RequestOptionsData | Možnosti prihlásenia bez mena — odpovedať môže kľúč ľubovoľného účtu. |
authenticate($response, ?$expect) | Passkey | Overí prihlásenie bez mena, voliteľne viazané na vlastníka alebo typ vlastníka. |
attestationFormats() | list<string> | Formáty atestácie, ktoré táto relying party vie overiť. |
fake() | PasskeysFake | Nahradí službu zaznamenávajúcou testovacou náhradou bez kryptografie (pozri Testovanie). |
Rozsah účtu je bezpečnostná hranica
- for($user)->authenticate() pripustí len kľúč tohto účtu — výsledok viaže cez AuthenticationExpectation::owner($user).
- find(), rename() a revoke() prijímajú Passkey alebo jeho ID — int, prípadne reťazec, v akom prichádza parameter z routy — a rename() a revoke() kľúč iného účtu, prípadne už odvolaný kľúč, odmietnu jednotnou výnimkou CredentialNotFound. Parameter z routy tak môžete odovzdať priamo; reťazec, ktorý nie je kanonické kladné celé číslo, sa jednoducho nenájde.
- find() vráti pre ID iného účtu null a neprezradí, že taký kľúč existuje.
Každé volanie získa svoju akciu z kontajnera, takže vlastná implementácia akcie platí pre fasádu, injektovanú službu aj metódy modelu. Fasáda je odporúčaná voľba; ďalšia sekcia ukazuje dva rovnocenné vstupné body bez nej.
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.