Authenticatie
waarschuwing Je bekijkt de documentatie voor een oude versie van Laravel. Overweeg het upgraden van uw project naar Laravel 8.x.
- Inleiding
- authenticatie van gebruikers
- de geverifieerde gebruiker
- Beveiligingsroutes
- HTTP Basic Authentication
- wachtwoordherinneringen & Reset
- sociale authenticatie
Inleiding
Laravel maakt authenticatie zeer eenvoudig. In feite, bijna alles is geconfigureerd voor u uit de doos. Het authenticatieconfiguratiebestand bevindt zich op config/auth.php
, wat een aantal goed gedocumenteerde opties bevat om het gedrag van de authenticatieservices aan te passen.
standaard bevat Laravel een App\User
model in uw app
map. Dit model kan worden gebruikt met het standaard Eloquent-verificatiestuurprogramma.
onthoud: maak bij het bouwen van het databaseschema voor dit model de wachtwoordkolom ten minste 60 tekens. Voordat u aan de slag gaat, moet u er ook voor zorgen dat uw users
(of equivalent) tabel een kolom remember_token
met 100 tekens bevat die niet kan worden gebruikt. Deze kolom wordt gebruikt om een token op te slaan voor “Onthoud mij” – sessies die door uw toepassing worden onderhouden. Dit kan gedaan worden door $table->rememberToken();
te gebruiken in een migratie. Natuurlijk, Laravel 5 schepen migraties voor deze kolommen uit de doos!
als uw toepassing Geen Eloquent gebruikt, kunt u het database
authenticatiestuurprogramma gebruiken dat de Laravel query builder gebruikt.
authenticatie van gebruikers
Laravel wordt geleverd met twee authenticatie gerelateerde controllers uit de doos. De AuthController
behandelt nieuwe gebruikersregistratie en “inloggen”, terwijl de PasswordController
de logica bevat om bestaande gebruikers te helpen hun vergeten wachtwoorden opnieuw in te stellen.
elk van deze regelaars gebruikt een eigenschap om de nodige methoden op te nemen. Voor veel toepassingen hoeft u deze controllers helemaal niet aan te passen. De weergaven die deze controllers weergeven bevinden zich in de resources/views/auth
map. U bent vrij om deze standpunten aan te passen zoals u wilt.
the User Registrar
om de formuliervelden te wijzigen die vereist zijn wanneer een nieuwe gebruiker zich registreert bij uw aanvraag, kunt u de klasse App\Services\Registrar
wijzigen. Deze klasse is verantwoordelijk voor het valideren en aanmaken van nieuwe gebruikers van uw toepassing.
de validator
methode van de Registrar
bevat de validatieregels voor nieuwe gebruikers van de toepassing, terwijl de create
methode van de Registrar
verantwoordelijk is voor het aanmaken van nieuwe User
records in uw database. U bent vrij om elk van deze methoden aan te passen als u wilt. Registrar
wordt aangeroepen door AuthController
via de methoden in de AuthenticatesAndRegistersUsers
eigenschap.
handmatige authenticatie
als u ervoor kiest de opgegeven AuthController
implementatie niet te gebruiken, moet u de authenticatie van uw gebruikers rechtstreeks beheren met behulp van de Laravel authenticatieklassen. Maak je geen zorgen, het is nog steeds een makkie! Laten we eerst eens kijken naar de attempt
methode:
de attempt
methode accepteert een array van sleutel / waarde paren als zijn eerste argument. De waarde password
wordt gehasht. De andere waarden in de array zullen worden gebruikt om de gebruiker te vinden in uw database tabel. Dus, in het voorbeeld hierboven, zal de gebruiker worden opgehaald door de waarde van de email
kolom. Als de gebruiker wordt gevonden, zal het gehashed wachtwoord opgeslagen in de database worden vergeleken met de hashed password
waarde doorgegeven aan de methode via de array. Als de twee gehashte wachtwoorden overeenkomen, zal een nieuwe geverifieerde sessie worden gestart voor de gebruiker.
de methode attempt
geeft true
terug als de authenticatie succesvol was. Anders wordt false
geretourneerd.
opmerking: in dit voorbeeld is
de functie intended
redirect zal de gebruiker omleiden naar de URL die hij probeerde te benaderen voordat hij door het authenticatiefilter werd betrapt. Indien de beoogde bestemming niet beschikbaar is, kan aan deze methode een nood-URI worden gegeven.
authenticatie van een gebruiker met Voorwaarden
u kunt ook extra voorwaarden toevoegen aan de authenticatiequery:
if (Auth::attempt()){ // The user is active, not suspended, and exists.}
bepalen of een gebruiker geauthenticeerd is
om te bepalen of de gebruiker al aangemeld is bij uw toepassing, kunt u de methode check
gebruiken:
if (Auth::check()){ // The user is logged in...}
een gebruiker authenticeren en” onthouden “
Als u de” Onthoud mij ” – functionaliteit in uw toepassing wilt opgeven, kunt u een Booleaanse waarde doorgeven als tweede argument aan de attempt
methode, die de gebruiker voor onbepaalde tijd authenticeert, of totdat ze handmatig afmelden. Natuurlijk moet uw users
tabel de kolom tekenreeks remember_token
bevatten, die zal worden gebruikt om het “Onthoud mij” token op te slaan.
if (Auth::attempt(, $remember)){ // The user is being remembered...}
Als u gebruikers “herinnert”, kunt u de methode viaRemember
gebruiken om te bepalen of de gebruiker geauthenticeerd is met behulp van de cookie “Onthoud mij” :
if (Auth::viaRemember()){ //}
gebruikers verifiëren met ID
om een gebruiker in te loggen met hun ID, gebruik de methode loginUsingId
:
Auth::loginUsingId(1);
gebruikersreferenties valideren zonder in te loggen
met de methode validate
kunt u de gebruikersreferenties valideren zonder ze daadwerkelijk in te loggen in de toepassing:
if (Auth::validate($credentials)){ //}
een gebruiker inloggen voor een enkele aanvraag
u kunt ook de once
methode gebruiken om een gebruiker in te loggen in de toepassing voor een enkele aanvraag. Er worden geen sessies of cookies gebruikt:
if (Auth::once($credentials)){ //}
handmatig inloggen op een gebruiker
Als u een bestaande gebruikersinstantie in uw toepassing wilt loggen, kunt u de methode login
aanroepen met de gebruikersinstantie:
Auth::login($user);
dit is gelijk aan het inloggen van een gebruiker via referenties met behulp van de attempt
methode.
een gebruiker uit de applicatie loggen
Auth::logout();
natuurlijk, als u de ingebouwde Laravel authentication controllers gebruikt, wordt een controllermethode die het loggen van gebruikers uit de applicatie afhandelt, direct geleverd.
Authenticatiegebeurtenissen
wanneer de attempt
methode wordt aangeroepen, zal de auth.attempt
gebeurtenis worden gestart. Als de verificatiepoging succesvol is en de gebruiker is ingelogd, zal ook de auth.login
gebeurtenis worden gestart.
de geverifieerde gebruiker
ophalen zodra een gebruiker is geverifieerd, zijn er verschillende manieren om een instantie van de gebruiker te verkrijgen.
Ten eerste kunt u de gebruiker benaderen vanaf de façade Auth
:
ten tweede kunt u de geverifieerde gebruiker benaderen via een instantie Illuminate\Http\Request
:
Ten derde kunt u het Illuminate\Contracts\Auth\Authenticatable
contract intypen. Dit type-hint kan worden toegevoegd aan een controller constructor, controller methode, of een andere constructor van een klasse opgelost door de service container:
routes beschermen
Route middleware kan worden gebruikt om alleen geverifieerde gebruikers toegang te geven tot een bepaalde route. Laravel levert standaard de auth
middleware en wordt gedefinieerd in app\Http\Middleware\Authenticate.php
. Het enige wat u hoeft te doen is het aan een routedefinitie te koppelen:
HTTP Basic Authentication
HTTP Basic Authentication biedt een snelle manier om gebruikers van uw toepassing te authenticeren zonder een speciale “login” – pagina op te zetten. Om te beginnen sluit u de auth.basic
middleware aan op uw route:
een Route beveiligen met HTTP Basic
Route::get('profile', );
standaard gebruikt de basic
middleware de kolom email
op de gebruikersrecord als de”gebruikersnaam”.
een stateless HTTP Basic Filter
instellen U kunt ook HTTP Basic Authentication gebruiken zonder een gebruikersidentificatiecookie in te stellen in de sessie, wat vooral handig is voor API-authenticatie. Definieer hiervoor een middleware die de onceBasic
methode aanroept:
public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}
als u PHP FastCGI gebruikt, werkt HTTP Basic authenticatie mogelijk niet correct out of the box. De volgende regels moeten worden toegevoegd aan uw .htaccess
bestand:
RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* -
wachtwoordherinneringen & Reset
Model & tabel
de meeste webapplicaties bieden gebruikers een manier om hun vergeten wachtwoorden opnieuw in te stellen. In plaats van u te dwingen om dit opnieuw te implementeren op elke toepassing, Laravel biedt handige methoden voor het verzenden van wachtwoordherinneringen en het uitvoeren van wachtwoordherinneringen.
controleer om te beginnen of uw User
model het Illuminate\Contracts\Auth\CanResetPassword
contract implementeert. Natuurlijk implementeert het User
model dat bij het framework is meegeleverd deze interface, en gebruikt het Illuminate\Auth\Passwords\CanResetPassword
kenmerk om de methoden op te nemen die nodig zijn om de interface te implementeren.
het genereren van de Herinneringstabel migratie
vervolgens moet een tabel worden gemaakt om de wachtwoordresettokens op te slaan. De migratie voor deze tabel is opgenomen bij Laravel out of the box en bevindt zich in de database/migrations
map. Dus alles wat je hoeft te doen is migreren:
php artisan migrate
Controller voor wachtwoordherinnering
Laravel bevat ook een Auth\PasswordController
die de logica bevat die nodig is om gebruikerswachtwoorden te resetten. We hebben zelfs uitzicht gegeven om je op weg te helpen! De weergaven bevinden zich in de map resources/views/auth
. U bent vrij om deze standpunten aan te passen aan het ontwerp van uw eigen toepassing.
uw gebruiker zal een e-mail ontvangen met een link die verwijst naar de getReset
methode van de PasswordController
. Deze methode zal het wachtwoord reset formulier te maken en gebruikers in staat stellen om hun wachtwoorden te resetten. Nadat het wachtwoord is gereset, wordt de gebruiker automatisch aangemeld bij de toepassing en doorgestuurd naar /home
. U kunt de post-reset redirect locatie aanpassen door een redirectTo
eigenschap op de PasswordController
te definiëren:
protected $redirectTo = '/dashboard';
Opmerking: Standaard verlopen wachtwoordresettokens na een uur. U kunt dit wijzigen via de
reminder.expire
optie in uwconfig/auth.php
bestand.
sociale authenticatie
naast de typische, op formulieren gebaseerde authenticatie biedt Laravel ook een eenvoudige, handige manier om authenticatie te doen bij OAuth-providers met behulp van Laravel Socialite. Socialite ondersteunt momenteel authenticatie met Facebook, Twitter, Google, GitHub en Bitbucket.
om te beginnen met Socialite, voeg het pakket toe aan uw composer.json
bestand:
"laravel/socialite": "~2.0"
registreer vervolgens Laravel\Socialite\SocialiteServiceProvider
in uw config/app.php
configuratiebestand. U kunt ook een gevel registreren:
'Socialize' => 'Laravel\Socialite\Facades\Socialite',
u moet referenties toevoegen voor de OAuth-services die uw toepassing gebruikt. Deze referenties moeten in uw config/services.php
configuratiebestand worden geplaatst en moeten de sleutel gebruikenfacebook
, twitter
, google
, of github
, afhankelijk van de providers die uw toepassing nodig heeft. Bijvoorbeeld::
'github' => ,
vervolgens bent u klaar om gebruikers te authenticeren! Je hebt twee routes nodig: een voor het omleiden van de gebruiker naar de OAuth provider, en een andere voor het ontvangen van de callback van de provider na authenticatie. Hier is een voorbeeld met behulp van de façade Socialize
:
de methode redirect
zorgt ervoor dat de gebruiker naar de OAuth-provider wordt gestuurd, terwijl de methode user
het inkomende verzoek leest en de informatie van de gebruiker van de provider opvraagt. Voordat u de gebruiker omgeleid, kunt u ook instellen “scopes” op het verzoek:
return Socialize::with('github')->scopes()->redirect();
zodra u een gebruikersinstantie hebt, kunt u een paar meer details over de gebruiker ophalen: