Wat is Fortify?
Laravel Fortify is een frontend-onafhankelijke implementatie van een authenticatiebackend. Het biedt alle routes en controllers die nodig zijn voor inloggen, registreren, wachtwoordherstel, e-mailverificatie, 2FA en passkeys.Fortify heeft geen UI. Het werkt doordat starter kits of je eigen UI requests sturen naar de routes van Fortify.
Geschiedenis: van Jetstream tot de huidige starter kits
Waarom gebruiken de huidige starter kits nog steeds Fortify?
De oorspronkelijke React/Vue starter kits waren geïmplementeerd zonder Fortify. Maar toen ondersteuning voor tweefactorauthenticatie (2FA) nodig werd, is Fortify direct geadopteerd, waardoor de hele authenticatie is overgegaan op een Fortify-basis. Omdat Fortify is ontworpen als “frontend-onafhankelijk”, past het goed bij starter kits die Inertia gebruiken, en wordt het nog steeds gebruikt.Fortify is momenteel het langst gebruikte officiële authenticatiepackage van Laravel. Sinds de introductie in 2020 is het actief gebleven, in wisselende vorm: van Jetstream tot de huidige starter kits.
Opbouw van de huidige starter kits
In de React/Vue starter kits wordt Fortify geconfigureerd in de volgende bestanden:app/Providers/FortifyServiceProvider.php— registratie van views, actions en rate limitingconfig/fortify.php— de in te schakelen functies en authenticatie-instellingen
De belangrijkste instellingen in config/fortify.php
Features::passkeys()) standaard niet ingeschakeld. Om ze in te schakelen voeg je ze toe aan de features-array.
Configuratie van de FortifyServiceProvider
De FortifyServiceProvider van de starter kits vervult drie rollen.
1. Configuratie van actions
app/Actions/Fortify/ pas je de logica voor het aanmaken van gebruikers en wachtwoordherstel aan. Validatie en hashing zijn hier gebundeld.
2. Configuratie van views
Features::enabled() worden de feature flags gecontroleerd en aan de view doorgegeven.
In een Blade-app geef je in plaats van
Inertia::render(...) een view('auth.login') terug. Wissel je van frontend, dan hoef je alleen de FortifyServiceProvider aan te passen en blijft de authenticatielogica ongewijzigd.3. Configuratie van rate limiting
- De
login-limiter: beperkt op de combinatie van e-mailadres en IP-adres (bescherming tegen brute force) - De
two-factor-limiter: beperkt op het inlogpoging-ID in de sessie
RateLimiter::for() sleutels die overeenkomen met de limiters-sleutel in config/fortify.php.
Belangrijkste functies en de geregistreerde routes
De belangrijkste routes die Fortify registreert, geordend per functie:
Met
php artisan route:list --name=fortify of gewoon php artisan route:list bekijk je de daadwerkelijk geregistreerde routes.
Tweefactorauthenticatie (2FA)
In de starter kits isFeatures::twoFactorAuthentication() ingeschakeld. Zowel confirm als confirmPassword staat op true.
Vanuit het 2FA-instellingenscherm kan de gebruiker het volgende doen:
1
2FA inschakelen
Stuur een POST-request naar
/user/two-factor-authentication. Bij succes wordt de status two-factor-authentication-enabled in de sessie gezet.2
De QR-code bekijken
Stuur een GET-request naar
/user/two-factor-qr-code; je krijgt de SVG van de QR-code terug om in te lezen in een authenticator-app.3
Bevestigen met een authenticatiecode
Stuur de code via een POST-request naar
/user/confirmed-two-factor-authentication om de configuratie te voltooien.4
De herstelcodes opslaan
Stuur een GET-request naar
/user/two-factor-recovery-codes, haal de herstelcodes op en bewaar ze op een veilige plek.Passkeys
Passkeys zijn recent toegevoegd als functie van Fortify. Het is wachtwoordloze authenticatie via WebAuthn, met ondersteuning voor Face ID, Touch ID, Windows Hello en hardwarebeveiligingssleutels.Inschakelen
Voeg toe aan defeatures-array in config/fortify.php.
PasskeyUser-contract en de PasskeyAuthenticatable-trait toe aan het User-model.
passkeys-sleutel in config/fortify.php.
De passkeys van Fortify wrappen intern het Composer-package
laravel/passkeys. Je hoeft het configuratiebestand van laravel/passkeys niet te publiceren; de passkeys-sleutel in config/fortify.php krijgt voorrang.@laravel/passkeys JS-client, React/Vue/Svelte-helpers en meer), zie ook Eerste verkenning van passkeys.
Gerelateerde pagina’s
Custom authenticatieguards
Uitleg over het bouwen van een custom authenticatieguard door de interfaces Guard en StatefulGuard te implementeren.
Officiële documentatie: Laravel Fortify
Zie de officiële documentatie voor installatie, alle functies en aanpassingsmogelijkheden.