NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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 → InvitationNotFound

Metóda fasády → akcia

Metóda fasádyAkcia
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 kryptomien

Odoslaní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.