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 email geen vereiste optie, het wordt alleen als voorbeeld gebruikt. U moet de kolomnaam gebruiken die overeenkomt met een” gebruikersnaam ” in uw database.

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 PasswordControllerte definiëren:

protected $redirectTo = '/dashboard';

Opmerking: Standaard verlopen wachtwoordresettokens na een uur. U kunt dit wijzigen via de reminder.expire optie in uw config/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:

gebruikersgegevens ophalen