DI a akcie
K dispozícii sú tri rovnocenné vstupné body a výber je na vás:
- Fasáda Passkeys — najkratší zápis a odporúčaná voľba.
- Služba injektovaná cez konštruktor — rovnaké API ako explicitná závislosť, bez statických volaní. Uveďte typ kontraktu RoundlyConsulting\Passkeys\Contracts\PasskeyService: je koreňom fasády a je naviazaný na RoundlyConsulting\Passkeys\PasskeyManager. Manažér je v kontajneri naviazaný len cez kontrakt, nie ako samostatný singleton — injektujte kontrakt, nie triedu.
- Akcie — jednoúčelové triedy s metódou execute(), ktoré zapojíte do vlastných akcií, jobov a príkazov.
Injektovanie služby
Passkeys::fake() vymení väzbu PasskeyService, takže náhradu vidí aj kód so závislosťou v konštruktore:
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use RoundlyConsulting\Passkeys\Contracts\PasskeyService;
final readonly class RevokePasskeyController
{
public function __construct(private PasskeyService $passkeys) {}
public function __invoke(Request $request, int $passkey): Response
{
$this->passkeys->for($request->user())->revoke($passkey);
return response()->noContent();
}
}Spustenie akcie
Každé volanie fasády zodpovedá jednej akcii, ktorá sa získa z kontajnera:
| Volanie fasády | Akcia |
|---|---|
for($user)->registrationOptions($o) | GenerateRegistrationOptionsAction::execute($user, $o) |
for($user)->register($r, $name) | VerifyRegistrationAction::execute($user, $r, $name) |
for($user)->authenticationOptions($o) / authenticationOptions($o) | GenerateAuthenticationOptionsAction::execute(?$user, $o) |
for($user)->authenticate($r) / authenticate($r, $expect) | VerifyAuthenticationAction::execute($r, ?$expect) |
for($user)->rename($p, $name) | RenamePasskeyAction::execute($passkey, $name) |
for($user)->revoke($p) | RevokePasskeyAction::execute($passkey) |
use RoundlyConsulting\Passkeys\Actions\GenerateRegistrationOptionsAction;
use RoundlyConsulting\Passkeys\Actions\RevokePasskeyAction;
use RoundlyConsulting\Passkeys\Actions\VerifyRegistrationAction;
use RoundlyConsulting\Passkeys\Models\Passkey;
// The same two registration calls, one action each:
$options = app(GenerateRegistrationOptionsAction::class)->execute($user, $overrides);
$passkey = app(VerifyRegistrationAction::class)->execute($user, $response, 'MacBook Touch ID');
// Trusted code that already scoped its query — the action itself checks no ownership:
Passkey::query()
->ownedBy($user)
->where('last_used_at', '<', now()->subYear())
->each(fn (Passkey $passkey) => app(RevokePasskeyAction::class)->execute($passkey));RenamePasskeyAction a RevokePasskeyAction prijímajú už načítaný Passkey a vlastníctvo nekontrolujú — to robí handle účtu. Priamo ich volajte len z dôveryhodného kódu, napríklad z administrátorského nástroja alebo jobu, ktorý už svoj dopyt obmedzil.
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.