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

Notifikácie

Všetky notifikácie dedia od AuthenticationNotification a posielajú sa e-mailom. Pre guard ich nahradíte cez notifications.classes.<type> (podtrieda AuthenticationNotification), alebo nastavením na null vypnete:

TypTriedaPríjemca
magic_linkMagicLinkNotificationúčet
email_otpEmailOtpNotificationúčet (kódy na prihlásenie aj opätovné overenie)
verify_emailVerifyEmailNotificationúčet
reset_passwordResetPasswordNotificationúčet
password_changedPasswordChangedNotificationúčet (zmena, obnova, nastavenie)
email_change_confirmationConfirmEmailChangeNotificationnová adresa
email_change_requestedEmailChangeRequestedNotificationstará adresa
email_changedEmailChangedNotificationstará adresa
account_existsAccountExistsNotificationuž používaná adresa (jazyk jej držiteľa)
invitationInvitationNotificationpozvaný (jazyk pozvánky)
new_deviceNewDeviceLoginNotificationúčet
two_factor_enabled / two_factor_disabledTwoFactorEnabledNotification / TwoFactorDisabledNotificationúčet
recovery_code_usedRecoveryCodeUsedNotificationúčet
passkey_added / passkey_removedPasskeyAddedNotification / PasskeyRemovedNotificationúčet
account_lockedAccountLockedNotificationúčet
refresh_token_reuseSuspiciousSessionNotificationúčet (opakované použitie refresh tokenu; rodina relácií bola zrušená)
sign_in_blockedSignInBlockedNotificationúčet (reakcia na riziko deny)
unusual_sign_inUnusualSignInNotificationúčet (reakcia na riziko notify)

Upozornenia na riziko

Reakcie na riziko majú vlastné e-maily. deny pošle SignInBlockedNotification (sign_in_blocked) — nikto sa neprihlásil; notify pošle po dokončení prihlásenia UnusualSignInNotification (unusual_sign_in) — jeho relácia je aktívna. Ani jeden netvrdí, že bola nejaká relácia odhlásená: SuspiciousSessionNotification (refresh_token_reuse) sa týka len opätovného použitia refresh tokenu, preto upozornenia na riziko upravíte či vypnete cez sign_in_blocked a unusual_sign_in. Oba sa odošlú vždy, keď risk.assessor guardu vráti úroveň s reakciou deny alebo notify (viď Aktivita a riziko). Publikovaná konfigurácia, ktorá je staršia a ich kľúče v notifications.classes nemá, ich posiela tiež; nastavením kľúča na null jeden vypnete:

'guards' => [
    'users' => [
        'model' => App\Models\User::class,
        'risk' => [
            'assessor' => NewDeviceRisk::class,
            'reactions' => ['elevated' => 'notify', 'high' => 'deny'],
        ],
        'notifications' => [
            'classes' => [
                'sign_in_blocked' => App\Notifications\SignInBlocked::class,   // extends AuthenticationNotification
                'unusual_sign_in' => null,                                        // null switches it off
            ],
        ],
    ],
],

Keď zasiahol administrátor

Štyri typy môže cez kód hostiteľa spôsobiť niekto iný než účet: password_changed (passwords()->set()), two_factor_disabled (twoFactor()->disable()), passkey_removed (passkeys()->remove()) a account_locked (lock()) — NotificationType::actorAware() vráti true práve pre ne. Ak administrátora odovzdáte ako actor:, platí:

  • NotificationData::$actor obsahuje ActorData — morph typ a kľúč actora, nikdy model, pretože šifrovaný doručovací job notifikáciu serializuje a atribúty administrátora (hash hesla, 2FA tajomstvo) nepatria do úložiska fronty ani do failed_jobs. ActorData::fromModel() ho vytvorí (neuložený model vyhodí InvalidArgumentException), is($model) porovná a resolve() model znova načíta — null, ak už neexistuje.
  • toMail() vezme predmet, úvod a záver z notifications.<type>.by_actor.*; riadky s tlačidlom, kódom a platnosťou zostanú. Text hovorí o „administrátorovi“ a actora nikdy nemenuje.
  • Udalosť (PasswordChanged, TwoFactorDisabled, PasskeyRemoved, AccountLocked) nesie model actora ako actor.

Samotný účet sa za actora nepovažuje, takže vlastné toky používateľa, HTTP endpointy aj automatické uzamknutie posielajú vždy základný text; bez actor: sa nič nemení a ostatné typy actora ignorujú. Nové riadky balík dodáva v angličtine a slovenčine:

Kľúč notifications.…sk
password_changed.by_actor.subjectVaše heslo do aplikácie :app zmenil administrátor
password_changed.by_actor.introAdministrátor zmenil heslo k vášmu účtu.
password_changed.by_actor.outroAk ste to nečakali, okamžite kontaktujte podporu.
two_factor_disabled.by_actor.subjectDvojfaktorové overenie vypol administrátor
two_factor_disabled.by_actor.introAdministrátor vypol vo vašom účte dvojfaktorové overenie.
two_factor_disabled.by_actor.outroAk ste to nečakali, okamžite kontaktujte podporu a dvojfaktorové overenie znova zapnite.
passkey_removed.by_actor.subjectAdministrátor odstránil z vášho účtu prístupový kľúč
passkey_removed.by_actor.introAdministrátor odstránil z vášho účtu prístupový kľúč. Na prihlásenie ho už nemožno použiť.
passkey_removed.by_actor.outroAk ste to nečakali, okamžite kontaktujte podporu.
account_locked.by_actor.subjectVáš účet v aplikácii :app zablokoval administrátor
account_locked.by_actor.introAdministrátor dočasne zablokoval váš účet. Kým blokovanie neskončí, nemôžete sa prihlásiť.
account_locked.by_actor.outroAk ste to nečakali, kontaktujte podporu.

Hostiteľ, ktorý preklady publikoval ešte pred pridaním týchto kľúčov, ich dostane tiež — Laravel publikovaný súbor zlúči s riadkami balíka; jazyk, ktorý balík nedodáva, sa pre ne vráti k app.fallback_locale, kým ich nedoplníte. Ak ich chcete sformulovať inak, prepíšte authentication::notifications.<type>.by_actor.* v publikovaných prekladoch. Ak má e-mail actora pomenovať, nahraďte triedu (notifications.classes.password_changed) a actora načítajte:

use Illuminate\Notifications\Messages\MailMessage;
use RoundlyConsulting\Auth\Notifications\PasswordChangedNotification;

final class NamedPasswordChangedNotification extends PasswordChangedNotification
{
    public function toMail(object $notifiable): MailMessage
    {
        $mail = parent::toMail($notifiable);
        $admin = $this->data->actor?->resolve();   // null without an actor, or when it was deleted

        return $admin === null ? $mail : $mail->line(__('Changed by :name.', ['name' => $admin->name]));
    }
}

Doručovanie

  • after_response (predvolené) — odpoveď pre známy účet nie je merateľne pomalšia než pre neznámy.
  • queue — cez šifrovaný job (ShouldBeEncrypted) na notifications.connection / queue, takže odkaz ani kód nikdy neležia čitateľné vo fronte.
  • sync — priamo, na vývoj.

Odkazy

Odkazy v e-mailoch sa skladajú len z konfigurácie (žiadne presmerovanie od klienta) so zástupnými symbolmi {frontend}, {app}, {guard}, {email} a {token}. Predvolene je tajomstvo vo fragmente URL (#token=…), takže sa nikdy nedostane do logu servera ani do hlavičky Referer — frontend prečíta location.hash a token pošle POST požiadavkou. Mail driver log mimo vývoja nepoužívajte.

'guards' => [
    'users' => [
        'model' => App\Models\User::class,
        'notifications' => [
            'delivery' => 'queue',       // sync|after_response|queue
            'queue' => 'mail',
            'classes' => [
                'magic_link' => App\Notifications\MagicLink::class,   // extends AuthenticationNotification
                'new_device' => null,                                  // null disables it
            ],
            'frontend_url' => 'https://app.example.com',
            'urls' => [
                'magic_link' => '{frontend}/auth/magic-link?guard={guard}#token={token}',
            ],
        ],
    ],
],

Texty a jazyk

Texty sú v authentication::notifications.* a balík ich dodáva v angličtine a slovenčine (en, sk); ostatné jazyky sa vrátia k app.fallback_locale, kým ich nedoplníte do lang/vendor/authentication/<locale>/. Na úpravu či doplnenie textov publikujte preklady. Účty dostávajú e-maily vo svojom jazyku cez preferredLocale():

php artisan vendor:publish --tag=authentication-translations

Riadok o platnosti sa vykresľuje cez trans_choice() podľa zostávajúcich minút, takže má tvary množného čísla (publikovaná úprava bez | funguje naďalej), a :reason pri opätovnom použití refresh tokenu sa vykreslí z notifications.refresh_token_reuse.reasons.* v jazyku e-mailu.

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.