Autentificare

vă avertizez că răsfoiți documentația pentru o versiune veche a lui Laravel. Luați în considerare actualizarea proiectului dvs. la Laravel 8.x.

  • Introducere
  • autentificarea utilizatorilor
  • recuperarea utilizatorului autentificat
  • protejarea rutelor
  • autentificare de bază HTTP
  • memento-uri de parolă & Resetare
  • autentificare socială

Introducere

Laravel face implementarea autentificării foarte simplă. De fapt, aproape totul este configurat pentru tine din cutie. Fișierul de configurare a autentificării este localizat la config/auth.php, care conține mai multe opțiuni bine documentate pentru modificarea comportamentului serviciilor de autentificare.

în mod implicit, Laravel include un model App\User în directorul app. Acest model poate fi utilizat cu driverul de autentificare elocvent implicit.

amintiți-vă: când construiți schema bazei de date pentru acest model, faceți coloana parolă cel puțin 60 de caractere. De asemenea, înainte de a începe, asigurați-vă că tabelul users (sau echivalent) conține o coloană remember_token cu 100 de caractere. Această coloană va fi utilizată pentru a stoca un jeton pentru sesiunile „remember me” menținute de aplicația dvs. Acest lucru se poate face folosind $table->rememberToken(); într-o migrare. Desigur, Laravel 5 Nave migrații pentru aceste coloane din cutie!

dacă aplicația dvs. nu utilizează elocvent, puteți utiliza driverul de autentificare database care utilizează Laravel query builder.

autentificarea utilizatorilor

Laravel expediază cu două controlere legate de autentificare scoase din cutie. AuthController gestionează înregistrarea utilizatorilor noi și „conectarea”, în timp ce PasswordController conține logica pentru a ajuta utilizatorii existenți să-și reseteze parolele uitate.

fiecare dintre acești controlori folosește o trăsătură pentru a include metodele lor necesare. Pentru multe aplicații, nu va trebui să modificați deloc aceste controlere. Vizualizările pe care le redă aceste controlere se află în directorul resources/views/auth. Sunteți liber să personalizați aceste vizualizări oricum doriți.

registratorul de utilizatori

pentru a modifica câmpurile de formular care sunt necesare atunci când un utilizator nou se înregistrează cu aplicația dvs., puteți modifica clasa App\Services\Registrar. Această clasă este responsabilă pentru validarea și crearea de noi utilizatori ai aplicației dvs.

metoda validator a Registrar conține regulile de validare pentru utilizatorii noi ai aplicației, în timp ce metoda create a Registrar este responsabilă pentru crearea de noi înregistrări User în baza de date. Sunteți liber să modificați fiecare dintre aceste metode după cum doriți. Registrar este numit de AuthController prin metodele conținute în AuthenticatesAndRegistersUsers trăsătură.

autentificare manuală

dacă alegeți să nu utilizați implementarea AuthController furnizată, va trebui să gestionați autentificarea utilizatorilor utilizând direct clasele de autentificare Laravel. Nu vă faceți griji, este încă o floare la ureche! În primul rând, să verificăm metoda attempt:

metoda attempt acceptă o serie de perechi cheie / valoare ca prim argument. Valoarea password va fi hash. Celelalte valori din matrice vor fi utilizate pentru a găsi utilizatorul în tabelul bazei de date. Deci, în exemplul de mai sus, utilizatorul va fi preluat de valoarea coloanei email. Dacă utilizatorul este găsit, parola hash stocată în baza de date va fi comparată cu valoarea hash password transmisă metodei prin matrice. Dacă cele două parole hash se potrivesc, va fi pornită o nouă sesiune autentificată pentru utilizator.

metoda attempt va returna true dacă autentificarea a avut succes. În caz contrar, false va fi returnat.

Notă: În acest exemplu, email nu este o opțiune necesară, ci este folosită doar ca exemplu. Ar trebui să utilizați orice nume de coloană corespunde unui „nume de utilizator” în baza de date.

funcția de redirecționare intended va redirecționa utilizatorul către adresa URL pe care încerca să o acceseze înainte de a fi prins de filtrul de autentificare. Un uri de rezervă poate fi dat acestei metode în cazul în care destinația dorită nu este disponibilă.

autentificarea unui utilizator cu condiții

de asemenea, puteți adăuga condiții suplimentare la interogarea de autentificare:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

determinarea dacă un utilizator este autentificat

pentru a determina dacă utilizatorul este deja conectat la aplicația dvs., puteți utiliza metoda check :

if (Auth::check()){ // The user is logged in...}

autentificarea unui utilizator și” memorarea ” acestuia

dacă doriți să furnizați funcționalitatea „remember me” În aplicația dvs., puteți trece o valoare booleană ca al doilea argument la metoda attempt, care va menține utilizatorul autentificat pe o perioadă nedeterminată sau până când se deconectează manual. Desigur, tabelul users trebuie să includă coloana șir remember_token, care va fi utilizată pentru a stoca tokenul „remember me”.

if (Auth::attempt(, $remember)){ // The user is being remembered...}

dacă vă „amintiți” de utilizatori, puteți utiliza metoda viaRemember pentru a determina dacă utilizatorul a fost autentificat folosind cookie-ul ” remember me:

if (Auth::viaRemember()){ //}

autentificarea utilizatorilor după ID

pentru a conecta un utilizator la aplicație după ID-ul său, utilizați metoda loginUsingId :

Auth::loginUsingId(1);

validarea acreditărilor de utilizator fără autentificare

metoda validate vă permite să validați acreditările unui utilizator fără a le conecta efectiv la aplicație:

if (Auth::validate($credentials)){ //}

conectarea unui utilizator pentru o singură Solicitare

de asemenea, puteți utiliza metoda once pentru a conecta un utilizator la aplicație pentru o singură Solicitare. Nu vor fi utilizate sesiuni sau cookie-uri:

if (Auth::once($credentials)){ //}

conectarea manuală a unui utilizator

dacă trebuie să conectați o instanță de utilizator existentă în aplicația dvs., puteți apela metoda login cu instanța de utilizator:

Auth::login($user);

acest lucru este echivalent cu logarea unui utilizator prin acreditări folosind metoda attempt.

logarea unui utilizator din aplicație

Auth::logout();

desigur, dacă utilizați controlerele de autentificare Laravel încorporate, o metodă de control care gestionează logarea utilizatorilor din aplicație este furnizată din cutie.

evenimente de autentificare

când se apelează metoda attempt, evenimentul auth.attempt va fi declanșat. Dacă încercarea de autentificare are succes și utilizatorul este conectat, evenimentul auth.login va fi concediat, de asemenea.

preluarea utilizatorului autentificat

odată ce un utilizator este autentificat, există mai multe modalități de a obține o instanță a utilizatorului.

în primul rând, puteți accesa utilizatorul de pe fațada Auth:

în al doilea rând, puteți accesa utilizatorul autentificat printr-o instanță Illuminate\Http\Request:

în al treilea rând, puteți tasta indiciu contractul Illuminate\Contracts\Auth\Authenticatable. Acest indiciu de tip poate fi adăugat la un constructor de controler, la metoda controlerului sau la orice alt constructor dintr-o clasă rezolvată de containerul de servicii:

protejarea rutelor

middleware-ul rutei poate fi utilizat pentru a permite doar utilizatorilor autentificați să acceseze o anumită rută. Laravel furnizează în mod implicit middleware-ul auth și este definit în app\Http\Middleware\Authenticate.php. Tot ce trebuie să faceți este să o atașați la o definiție a traseului:

autentificare HTTP Basic

autentificare HTTP Basic oferă o modalitate rapidă de a autentifica utilizatorii aplicației dvs. fără a configura o pagină dedicată de „conectare”. Pentru a începe, atașați middleware-ul auth.basic la traseu:

protejarea unei rute cu HTTP Basic

Route::get('profile', );

în mod implicit, middleware-ul basic va folosi coloana email din înregistrarea utilizatorului ca „nume de utilizator”.

Configurarea unui filtru HTTP Basic apatrid

de asemenea, puteți utiliza autentificarea HTTP Basic fără a seta un cookie de identificare a utilizatorului în sesiune, care este deosebit de util pentru autentificarea API. Pentru a face acest lucru, definiți un middleware care apelează metoda onceBasic :

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

dacă utilizați PHP FastCGI, autentificarea de bază HTTP poate să nu funcționeze corect din cutie. Următoarele linii trebuie adăugate la fișierul .htaccess :

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

memento-uri pentru parole & Resetare

Model & tabel

majoritatea aplicațiilor web oferă utilizatorilor o modalitate de a-și reseta parolele uitate. Mai degrabă decât forțându-vă să re-pună în aplicare acest lucru pe fiecare aplicație, Laravel oferă metode convenabile pentru trimiterea de memento-uri parola și efectuarea resetări parola.

pentru a începe, verificați dacă modelul dvs. User implementează contractul Illuminate\Contracts\Auth\CanResetPassword. Desigur, modelul User inclus în cadru implementează deja această interfață și folosește trăsătura Illuminate\Auth\Passwords\CanResetPassword pentru a include Metodele necesare implementării interfeței.

generarea migrării tabelului de memento

apoi, trebuie creat un tabel pentru a stoca jetoanele de resetare a parolei. Migrarea pentru acest tabel este inclusă cu Laravel out of the box și se află în directorul database/migrations. Deci, tot ce trebuie să faceți este să migrați:

php artisan migrate

controlerul de reamintire a parolei

Laravel include, de asemenea, un Auth\PasswordController care conține logica necesară pentru resetarea parolelor utilizatorului. Am oferit chiar și vizualizări pentru a vă începe! Vizualizările se află în directorul resources/views/auth. Sunteți liber să modificați aceste vizualizări după cum doriți pentru a se potrivi cu designul propriei aplicații.

utilizatorul dvs. va primi un e-mail cu un link care indică metoda getReseta PasswordController. Această metodă va face formularul de resetare a parolei și va permite utilizatorilor să-și reseteze parolele. După resetarea parolei, utilizatorul va fi conectat automat la aplicație și redirecționat către /home. Puteți personaliza locația de redirecționare post-Resetare definind o proprietate redirectTo pe PasswordController:

protected $redirectTo = '/dashboard';

notă: în mod implicit, jetoanele de resetare a parolei expiră după o oră. Puteți modifica acest lucru prin opțiunea reminder.expire din fișierul config/auth.php.

autentificare socială

pe lângă autentificarea tipică, bazată pe formular, Laravel oferă, de asemenea, o modalitate simplă și convenabilă de autentificare cu furnizorii OAuth folosind Laravel Socialite. Socialite acceptă în prezent autentificarea cu Facebook, Twitter, Google, Github și Bitbucket.

pentru a începe cu Socialite, includeți pachetul în fișierul composer.json :

"laravel/socialite": "~2.0"

apoi, înregistrați Laravel\Socialite\SocialiteServiceProvider în fișierul de configurare config/app.php. De asemenea, puteți înregistra o fațadă:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

va trebui să adăugați acreditări pentru serviciile OAuth pe care le utilizează aplicația dvs. Aceste acreditări ar trebui să fie plasate în fișierul de configurare config/services.php și ar trebui să utilizeze cheia facebook, twitter, google, sau github, în funcție de furnizorii solicitați de aplicația dvs. De exemplu:

'github' => ,

apoi, sunteți gata să autentificați utilizatorii! Veți avea nevoie de două rute: unul pentru redirecționarea utilizatorului către furnizorul OAuth și altul pentru primirea apelului de la furnizor după autentificare. Iată un exemplu folosind fațada Socialize:

metoda redirect are grijă să trimită utilizatorul la furnizorul OAuth, în timp ce metoda user va citi solicitarea primită și va prelua informațiile utilizatorului de la furnizor. Înainte de a redirecționa utilizatorul, puteți seta, de asemenea, „domenii” la cerere:

return Socialize::with('github')->scopes()->redirect();

odată ce aveți o instanță de utilizator, puteți apuca câteva mai multe detalii despre utilizator:

preluarea detalii utilizator