---
title: "Fasáda Authentication — Auth for Laravel | Roundly"
description: "Prehľad fasády Authentication — prihlasovacie a reláciové operácie guardu, sedem podkontextov, pravidlá rozsahu a výsledky prihlásenia."
url: https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel/programove-api
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Auth for Laravel](https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel.md)

# Fasáda Authentication

Všetko, čo robí HTTP vrstva, je dostupné aj z PHP cez RoundlyConsulting\\Auth\\Facades\\Authentication (bez aliasu Auth — kolidoval by s Laravelom). Authentication::guard('clients') je API jedného guardu:

```php
use RoundlyConsulting\Auth\DataTransferObjects\PasswordCredentials;
use RoundlyConsulting\Auth\Facades\Authentication;
use RoundlyConsulting\Auth\Http\Resources\ChallengeResource;
use RoundlyConsulting\Auth\Http\Resources\TokenPairResource;

$guard = Authentication::guard('clients');

$result = $guard->attempt(
    new PasswordCredentials(identifier: $request->string('email')->toString(), password: $request->string('password')->toString()),
    $guard->contextFrom($request),
);

return $result->isAuthenticated()
    ? TokenPairResource::make($result->tokens)
    : ChallengeResource::make($result->challenge);   // continue with $guard->challenges()->complete(…)
```

Každá ďalšia metóda fasády pre guard beží na predvolenom guarde (authentication.default), takže Authentication::twoFactor()->status($user) je to isté ako Authentication::guard()->twoFactor()->status($user):

```php
use RoundlyConsulting\Auth\DataTransferObjects\InvitationData;
use RoundlyConsulting\Auth\Enums\InvalidationReason;
use RoundlyConsulting\Auth\Facades\Authentication;

// Every per-guard method runs on the default guard (authentication.default)…
Authentication::twoFactor()->status($user);          // enabled, pending, recovery codes left, mode
Authentication::passwords()->set($user, 'n3w-Passphrase!', InvalidationReason::Security);
Authentication::invitations()->create(new InvitationData('ada@example.com'))->url;   // needs invitations.enabled
Authentication::lock($user, seconds: 3600);

// …or on a named guard
Authentication::guard('clients')->twoFactor()->status($client);

// Manager-level
Authentication::guards();                            // ['users', 'clients']
Authentication::prune(days: 30);                     // PruneReport — what authentication:prune runs
```

Pozvánky sú predvolene vypnuté: kým guard nenastaví invitations.enabled = true, každé volanie invitations() vyhodí LoginMethodDisabled (cez HTTP 404 method\_disabled).

## Základné operácie

Authentication::guard($name) vráti GuardContext; každá metóda spustí jednu akciu z kontajnera pre daný guard:

| Metóda | Vracia |
| --- | --- |
| `attempt(PasswordCredentials, SessionContext)` | LoginResult (tokeny alebo výzva) |
| `requestMagicLink($email, $ctx) / consumeMagicLink($token, $ctx)` | void / LoginResult |
| `requestEmailOtp($email, $ctx) / verifyEmailOtp($email, $code, $ctx)` | void / LoginResult |
| `passkeyLoginOptions($ctx) / loginWithPasskey($response, $ctx)` | RequestOptionsData / LoginResult |
| `register(RegistrationData)` | RegistrationResult |
| `issueTokens($account, $ctx, $method, $amr)` | TokenPair — prihlásenie, za ktoré ručí hostiteľ (impersonácia, SSO); spustí TokensIssued |
| `refresh($refreshToken, $ctx)` | TokenPair (predošlý prístupový token relácie prestane platiť) |
| `sessions($account, $currentSessionId)` | Collection<SessionData> |
| `logout($account, $current) / logoutSession($account, $id) / logoutOthers($account, $current) / logoutEverywhere($account)` | — / — / int / int |
| `invalidate($account, InvalidationReason, ?$keep, ?$ctx)` | ?TokenPair (znovu vydaný pár pri others) |
| `disable($account, ?$reason, ?$actor) / enable($account, ?$actor)` | — (actor sa dostane do AccountDisabled / AccountEnabled) |
| `lock($account, ?$seconds, ?$actor) / unlock($account, ?$actor)` | CarbonImmutable / — (zámok upozorní vlastníka — s actorom, že účet uzamkol administrátor — a nikdy neodhlási) |
| `updateLocale($account, LocaleData)` | Account |
| `activity($account, $perPage = 20)` | Stránkovaná vlastná LoginActivity |
| `contextFrom(Request) / tokenFrom(Request)` | SessionContext / CurrentToken |
| `name() / config() / accounts()` | string / GuardConfig / AccountRepository |

## Podkontexty

Každá oblasť má vlastný podkontext — na guarde alebo na fasáde pre predvolený guard ($a je účet):

| Podkontext | Metódy |
| --- | --- |
| `twoFactor()` | `status($a), start($a), confirm($a, $code, ?$current, ?$ctx), disable($a, ?$current, ?$ctx, ?$actor), regenerateRecoveryCodes($a, ?$current, ?$ctx)` |
| `passkeys()` | `all($a), registrationOptions($a), register($a, $response, ?$name, ?$current, ?$ctx), rename($a, Passkey\|int, $name), remove($a, Passkey\|int, ?$current, ?$ctx, ?$actor)` |
| `passwords()` | `set($a, $password, $reason, ?$actor), change($a, ChangePasswordData), requestReset($email, $ctx), reset(PasswordResetData), validate($password, ?$a, ?$email), rule(?$email)` |
| `email()` | `sendVerification($a, ?$ctx), requestVerification($a, $ctx), resendVerification($email, $ctx), verify($tokenOrCode, ?$email, $ctx), requestChange($a, EmailChangeData), confirmChange($token, $ctx)` |
| `invitations()` | `create(InvitationData) → InvitationLink, accept(AcceptInvitationData) → RegistrationResult, paginate(?$status, $perPage), preview($token), find($id), resend(Invitation\|int), revoke(Invitation\|int), link(Invitation\|int)` |
| `reauthentication()` | `methods($a), sendCode($a, $ctx), passkeyOptions($a, $current), confirm($a, ReauthenticationData), ensureRecent($a, $current, ?$seconds), ensureFor(SensitiveAction, $a, $current)` |
| `challenges()` | `complete(ChallengeFactorData), passkeyOptions($token, $ctx), passkeyEnrolmentOptions($token, $ctx), startTwoFactorEnrolment($token, $ctx)` |

K tomu Authentication::prune(?$days), guards(), routes($guard) a currentGuard().

## Rozsah

Každá metóda, ktorá prijíma účet, odmietne model iného guardu (AuthenticationMisconfigured, „belongs to another guard“) skôr, než čokoľvek zapíše. Pozvánka či token výzvy iného guardu a passkey iného účtu sú neznáme (InvitationNotFound, ChallengeInvalid, PasskeyNotFound).

## Konanie za prihláseného používateľa

Pri zmenách prihlasovacích údajov odovzdajte ako $current token volajúceho ($guard->tokenFrom($request)): jeho zariadenie sa pri others zachová a vráti sa znovu vydaný pár — klient naň musí prejsť. Pri volaniach z administrácie a CLI $current vynechajte. HTTP vrstva navyše pred akciami z reauthentication.required\_for vyžaduje nedávne opätovné overenie; volajúci z PHP za používateľa ručia sami, alebo najprv spustia tú istú bránu:

```php
use RoundlyConsulting\Auth\Enums\SensitiveAction;
use RoundlyConsulting\Auth\Facades\Authentication;

$guard   = Authentication::guard('users');
$current = $guard->tokenFrom($request);

$guard->reauthentication()->ensureFor(SensitiveAction::DisableTwoFactor, $user, $current);
$tokens = $guard->twoFactor()->disable($user, $current, $guard->contextFrom($request));   // swap the client to $tokens
```

passwords()->change() spustí bránu sám pre účet, ktorý si nastavuje prvé heslo. Používajte Authentication::…, nie metódy modelov z nižších balíkov: $user->disableTwoFactor(), $user->regenerateTwoFactorRecoveryCodes(), Passkeys::for($user)->revoke(), $user->revokeAllSessions() či RefreshTokens::sessions($user)->revokeAll() zmenia prihlasovací údaj, no obídu pravidlá tohto balíka — režim guardu, invalidáciu, udalosti aj upozornenie vlastníka.

## Konanie ako administrátor

passwords()->set(), twoFactor()->disable(), passkeys()->remove() a lock() prijímajú voliteľný posledný argument actor: — odovzdajte ho ako pomenovaný argument. Ak konal niekto iný než účet, e-mail vlastníkovi povie, že zasiahol administrátor (pozrite Notifikácie), a udalosť ho nesie ako actor; disable(), enable() a unlock() prijímajú ten istý argument len pre svoje udalosti, keďže e-mail neposielajú:

```php
use RoundlyConsulting\Auth\Enums\InvalidationReason;
use RoundlyConsulting\Auth\Facades\Authentication;

// Support desk: pass the admin, so the owner is told an administrator acted
Authentication::passwords()->set($user, $temporaryPassword, InvalidationReason::Security, actor: $admin);
Authentication::lock($user, seconds: 3600, actor: $admin);
Authentication::twoFactor()->disable($user, actor: $admin);   // no $current: an admin keeps no device
Authentication::disable($user, 'chargeback fraud', actor: $admin);
```

Actor je len informatívny: akýkoľvek uložený model — administrátor iného guardu aj model, ktorý nie je účtom — bez kontroly guardu či vlastníctva. Samotný účet sa za actora nepovažuje, takže actor: $request->user() je vždy bezpečné. Neuložený model alebo iný actor spolu s tokenom $current vyhodí InvalidArgumentException skôr, než sa čokoľvek zapíše — ten token patrí zariadeniu účtu, nikdy administrátorovi. Bez actor: sa nič nemení.

## Vstupy z požiadavky

$guard->contextFrom($request) zachytí IP adresu, user agent, id zariadenia z hlavičky X-Device-Id, vstupy device\_name a timezone a dohodnutý jazyk; pre joby a testy vytvorte SessionContext priamo: new SessionContext(ipAddress: '203.0.113.9', userAgent: 'CLI'). $guard->tokenFrom($request) načíta prístupový token volajúceho (jti, sid, auth\_time, amr).

## Spracovanie výsledku prihlásenia

LoginResult je buď prihlásený (TokenPair), alebo vyžaduje výzvu (PendingChallenge). Zostávajúce kroky dokončíte cez challenges()->complete():

```php
use RoundlyConsulting\Auth\DataTransferObjects\ChallengeFactorData;
use RoundlyConsulting\Auth\DataTransferObjects\PasswordCredentials;
use RoundlyConsulting\Auth\Enums\FactorMethod;
use RoundlyConsulting\Auth\Facades\Authentication;

$guard   = Authentication::guard('users');
$context = $guard->contextFrom($request);

$result = $guard->attempt(new PasswordCredentials($request->input('identifier'), $request->input('password')), $context);

if ($result->requiresChallenge()) {
    $pending = $result->challenge;   // token, expiresAt, method, completed, remaining (ChallengeRequirement[]), attemptsLeft
    // … later, with the user's TOTP code:
    $result = $guard->challenges()->complete(new ChallengeFactorData(
        challengeToken: $pending->token,
        method: FactorMethod::Totp,
        context: $context,
        code: $request->input('code'),
    ));
}

$tokens = $result->tokens;   // accessToken, accessExpiresAt, refreshToken, refreshExpiresAt, sessionId, accessTokenId, tokenType
```

Ak chcete z vlastného controllera odpovedať v JSON tvare balíka, použite LoginResponse:

```php
use RoundlyConsulting\Auth\Http\Responses\LoginResponse;

// Render a LoginResult in the same shape as the package endpoints
return LoginResponse::make($result, $request);
```

## Relácie riadené hostiteľom

issueTokens() vydá reláciu pre prihlásenie, za ktoré ručí váš kód — impersonácia, SSO callback, testy — a spustí TokensIssued:

```php
use RoundlyConsulting\Auth\Enums\AuthMethodReference;
use RoundlyConsulting\Auth\Enums\InvalidationReason;
use RoundlyConsulting\Auth\Enums\LoginMethod;

// SSO callback: the host vouches for the authentication (fires TokensIssued)
$pair = Authentication::guard('users')->issueTokens($user, $context, LoginMethod::Host, [AuthMethodReference::Mfa]);

// Incident response
Authentication::guard('users')->invalidate($user, InvalidationReason::Security);
Authentication::guard('users')->disable($user, 'chargeback fraud', actor: $admin);
```

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/auth-for-laravel.md)
