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,
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 getReset
a 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șierulconfig/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: