DI a akcie
Fasáda je odporúčaná voľba, nie jediná cesta. Rovnaký kód spúšťajú tri vstupy: fasáda Authentication (najkratší zápis), manažér RoundlyConsulting\Auth\AuthenticationManager — koreň fasády, singleton v kontajneri — injektovaný cez konštruktor (rovnaké API, explicitná závislosť, žiadne statické volania) a akcie v RoundlyConsulting\Auth\Actions\* (jednoúčelové triedy s execute(), ktoré skladáte do vlastných akcií, jobov a príkazov).
Injektovanie manažéra
use RoundlyConsulting\Auth\AuthenticationManager;
use RoundlyConsulting\Auth\Enums\InvalidationReason;
final class ResetSupportPassword
{
public function __construct(private AuthenticationManager $authentication) {}
public function __invoke(User $user, string $password): void
{
$this->authentication->guard('users')->passwords()->set($user, $password, InvalidationReason::Security);
}
}Volanie akcie
Akcie určené pre hostiteľa prijímajú ako prvý argument názov guardu a účet, pozvánku či passkey iného guardu odmietnu skôr, než čokoľvek zapíšu:
use RoundlyConsulting\Auth\Actions\Account\LockAccount;
use RoundlyConsulting\Auth\Actions\Invitations\ResendInvitation;
use RoundlyConsulting\Auth\Actions\Passwords\SetPassword;
use RoundlyConsulting\Auth\Enums\InvalidationReason;
// The raw actions — the same code path; the guard name comes first.
app(SetPassword::class)->execute('users', $user, $temporaryPassword, InvalidationReason::Security);
app(LockAccount::class)->execute('users', $user, 3600);
app(ResendInvitation::class)->execute('users', $invitation); // another guard's invitation → InvitationNotFoundMetóda fasády → akcia
| Metóda fasády | Akcia |
|---|---|
attempt() | Login\AttemptPasswordLogin |
requestMagicLink() / consumeMagicLink() | Login\RequestMagicLink / Login\ConsumeMagicLink |
requestEmailOtp() / verifyEmailOtp() | Login\RequestEmailOtp / Login\VerifyEmailOtp |
passkeyLoginOptions() / loginWithPasskey() | Login\BeginPasskeyLogin / Login\CompletePasskeyLogin |
register() | Registration\RegisterAccount |
issueTokens() | Tokens\IssueAccountTokens |
refresh() | Tokens\RefreshTokenPair |
sessions() | Sessions\ListSessions |
logout() / logoutSession() | Sessions\LogoutCurrentSession / Sessions\LogoutSession |
logoutOthers() / logoutEverywhere() | Sessions\LogoutOtherSessions / Sessions\LogoutEverywhere |
invalidate() | Sessions\InvalidateAccountTokens |
disable() / enable() | Account\DisableAccount / Account\EnableAccount |
lock() / unlock() | Account\LockAccount / Account\UnlockAccount |
updateLocale() | Account\UpdateLocale |
activity() | Activity\ListLoginActivity |
prune() | Activity\PruneAuthenticationData |
twoFactor()->status() / start() | TwoFactor\GetTwoFactorStatus / TwoFactor\StartTwoFactorEnrolment |
twoFactor()->confirm() / disable() | TwoFactor\ConfirmTwoFactorEnrolment / TwoFactor\DisableTwoFactor |
twoFactor()->regenerateRecoveryCodes() | TwoFactor\RegenerateRecoveryCodes |
passkeys()->all() / registrationOptions() | Passkeys\ListPasskeys / Passkeys\BeginPasskeyRegistration |
passkeys()->register() / rename() / remove() | Passkeys\RegisterPasskey / Passkeys\RenamePasskey / Passkeys\RemovePasskey |
passwords()->set() / change() | Passwords\SetPassword / Passwords\ChangePassword |
passwords()->requestReset() / reset() | Passwords\RequestPasswordReset / Passwords\ResetPassword |
passwords()->validate() | Passwords\ValidatePasswordPolicy |
email()->sendVerification() / requestVerification() / resendVerification() | Email\SendEmailVerification / Email\RequestEmailVerification / Email\ResendEmailVerification |
email()->verify() | Email\VerifyEmail |
email()->requestChange() / confirmChange() | Email\RequestEmailChange / Email\ConfirmEmailChange |
invitations()->create() / accept() | Invitations\CreateInvitation / Invitations\AcceptInvitation |
invitations()->paginate() / preview() | Invitations\ListInvitations / Invitations\PreviewInvitation |
invitations()->resend() / revoke() | Invitations\ResendInvitation / Invitations\RevokeInvitation |
invitations()->link() | Invitations\SendInvitation (notify: false) |
reauthentication()->sendCode() / passkeyOptions() | Account\SendReauthenticationCode / Account\BeginPasskeyReauthentication |
reauthentication()->confirm() / ensureRecent() | Account\Reauthenticate / Account\EnsureRecentlyAuthenticated |
challenges()->complete() | Challenges\CompleteTwoFactorStep, ConfirmTwoFactorEnrolmentStep, CompletePasskeyStep or CompletePasskeyEnrolmentStep (by method) |
challenges()->passkeyOptions() / passkeyEnrolmentOptions() | Challenges\BeginPasskeyStep / Challenges\BeginPasskeyEnrolmentStep |
challenges()->startTwoFactorEnrolment() | Challenges\StartTwoFactorEnrolmentStep |
- Fasáda, manažér aj controllery balíka si akcie berú z kontajnera, takže všetky tri spúšťajú rovnaký kód.
- Akcie označené @internal sú stavebné bloky týchto tokov, nie API: prihlasovací reťazec (CompleteFirstFactor, CompleteLogin, EnsureAccountCanLogin, ResolveRequiredSteps, StartLoginChallenge, AssessLoginRisk, DetectNewDevice, RecordLoginActivity), engine výziev (AdvanceChallenge, FinalizeChallenge, FindActiveChallenge, InvalidateChallenge, RecordChallengeFailure), štyri akcie OneTimeTokens, VerifyPassword, CreateAccount (nahradíte ho cez registration.creator), EnforceSessionLimit, BuildAccessTokenRequest a IssueTokenPair (tokeny vydávajte cez issueTokens(), ktoré spustí aj TokensIssued).
- Akcie prijímajú tie isté DTO ako fasáda, z RoundlyConsulting\Auth\DataTransferObjects — PasswordCredentials, SessionContext, CurrentToken, RegistrationData, InvitationData, AcceptInvitationData, ChallengeFactorData, ReauthenticationData, ChangePasswordData, PasswordResetData, EmailChangeData a LocaleData.
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.