Autenticazione
ATTENZIONE Stai sfogliando la documentazione per una vecchia versione di Laravel. Considerare l’aggiornamento del progetto a Laravel 8.x.
- Introduzione
- l’Autenticazione degli Utenti
- Recupero L’Utente Autenticato
- Proteggere le Rotte
- HTTP Basic Authentication
- i Promemoria Password & Reset
- l’Autenticazione Sociale
Introduzione
Laravel rende l’implementazione di autenticazione molto semplice. In realtà, quasi tutto è configurato per voi fuori dalla scatola. Il file di configurazione dell’autenticazione si trova in config/auth.php
, che contiene diverse opzioni ben documentate per modificare il comportamento dei servizi di autenticazione.
Per impostazione predefinita, Laravel include un modello App\User
nella directory app
. Questo modello può essere utilizzato con il driver di autenticazione Eloquent predefinito.
Ricorda: quando si crea lo schema del database per questo modello, rendere la colonna della password di almeno 60 caratteri. Inoltre, prima di iniziare, assicurati che la tua tabella users
(o equivalente) contenga una colonna nullable, string remember_token
di 100 caratteri. Questa colonna verrà utilizzata per memorizzare un token per le sessioni “remember me” gestite dall’applicazione. Questo può essere fatto usando $table->rememberToken();
in una migrazione. Naturalmente, Laravel 5 navi migrazioni per queste colonne fuori dalla scatola!
Se l’applicazione non utilizza Eloquent, è possibile utilizzare il driver di autenticazione database
che utilizza Laravel query builder.
Autenticazione degli utenti
Laravel viene fornito con due controller relativi all’autenticazione pronti all’uso. AuthController
gestisce la registrazione di un nuovo utente e il “login”, mentre PasswordController
contiene la logica per aiutare gli utenti esistenti a reimpostare le password dimenticate.
Ciascuno di questi controller utilizza un tratto per includere i metodi necessari. Per molte applicazioni, non sarà necessario modificare questi controller a tutti. Le viste visualizzate da questi controller si trovano nella directory resources/views/auth
. Sei libero di personalizzare queste viste come desideri.
Il Registrar utente
Per modificare i campi del modulo richiesti quando un nuovo utente si registra con l’applicazione, è possibile modificare la classe App\Services\Registrar
. Questa classe è responsabile della convalida e della creazione di nuovi utenti dell’applicazione.
Il metodo validator
di Registrar
contiene le regole di convalida per i nuovi utenti dell’applicazione, mentre il metodo create
di Registrar
è responsabile della creazione di nuovi record User
nel database. Sei libero di modificare ciascuno di questi metodi come desideri. Registrar
viene chiamato da AuthController
tramite i metodi contenuti nel tratto AuthenticatesAndRegistersUsers
.
Autenticazione manuale
Se si sceglie di non utilizzare l’implementazione AuthController
fornita, sarà necessario gestire direttamente l’autenticazione degli utenti utilizzando le classi di autenticazione Laravel. Non preoccuparti, è ancora un gioco da ragazzi! Per prima cosa, diamo un’occhiata al metodo attempt
:
Il metodo attempt
accetta una matrice di coppie chiave / valore come primo argomento. Il valore password
verrà eseguito con hash. Gli altri valori nell’array verranno utilizzati per trovare l’utente nella tabella del database. Quindi, nell’esempio sopra, l’utente verrà recuperato dal valore della colonna email
. Se l’utente viene trovato, la password hash memorizzata nel database verrà confrontata con il valore hash password
passato al metodo tramite l’array. Se le due password con hash corrispondono, verrà avviata una nuova sessione autenticata per l’utente.
Il metodo attempt
restituirà true
se l’autenticazione ha avuto successo. In caso contrario, false
verrà restituito.
Nota: In questo esempio,
La funzione di reindirizzamento intended
reindirizzerà l’utente all’URL a cui stava tentando di accedere prima di essere catturato dal filtro di autenticazione. Un URI di fallback può essere dato a questo metodo nel caso in cui la destinazione prevista non sia disponibile.
Autenticazione di un utente con Condizioni
È inoltre possibile aggiungere ulteriori condizioni alla query di autenticazione:
if (Auth::attempt()){ // The user is active, not suspended, and exists.}
per Determinare Se Un Utente È Autenticato
Per determinare se l’utente è già registrato nella vostra applicazione, è possibile utilizzare il check
metodo:
if (Auth::check()){ // The user is logged in...}
l’Autenticazione di Un Utente E “Ricordare” Li
Se si desidera fornire il “ricordati di me” funzionalità dell’applicazione, è possibile passare un valore booleano come secondo argomento all’ attempt
metodo, che non mancherà di tenere l’utente autenticato a tempo indeterminato, o fino a quando non manualmente il logout. Naturalmente, la tabella users
deve includere la colonna string remember_token
, che verrà utilizzata per memorizzare il token “remember me”.
if (Auth::attempt(, $remember)){ // The user is being remembered...}
Se si sono “ricordando” gli utenti, è possibile utilizzare il viaRemember
metodo per determinare se l’utente è stato autenticato con “ricordati di me” cookie:
if (Auth::viaRemember()){ //}
l’Autenticazione degli Utenti Con ID
Per il login di un utente nell’applicazione dalla loro identificazione, utilizzare loginUsingId
metodo:
Auth::loginUsingId(1);
La convalida delle Credenziali Utente Senza effettuare il Login
Il validate
metodo consente di convalidare le credenziali di un utente senza registrazione effettivamente in applicazione:
if (Auth::validate($credentials)){ //}
Registrazione di un utente per una singola richiesta
È inoltre possibile utilizzare il metodo once
per registrare un utente nell’applicazione per una singola richiesta. Non verranno utilizzate sessioni o cookie:
if (Auth::once($credentials)){ //}
Registrazione manuale di un utente
Se è necessario registrare un’istanza utente esistente nell’applicazione, è possibile chiamare il metodo login
con l’istanza utente:
Auth::login($user);
Ciò equivale all’accesso a un utente tramite credenziali utilizzando il metodo attempt
.
Disconnessione di un utente dall’applicazione
Auth::logout();
Naturalmente, se si utilizzano i controller di autenticazione Laravel incorporati, viene fornito immediatamente un metodo controller che gestisce la registrazione degli utenti dall’applicazione.
Eventi di autenticazione
Quando viene chiamato il metodo attempt
, l’evento auth.attempt
verrà attivato. Se il tentativo di autenticazione ha esito positivo e l’utente ha effettuato l’accesso, verrà attivato anche l’evento auth.login
.
Recupero dell’utente autenticato
Una volta autenticato un utente, esistono diversi modi per ottenere un’istanza dell’utente.
In primo luogo, è possibile accedere all’utente dalla facciata Auth
:
In secondo luogo, è possibile accedere all’utente autenticato tramite un’istanza Illuminate\Http\Request
:
In terzo luogo, è possibile digitare un suggerimento sul contratto Illuminate\Contracts\Auth\Authenticatable
. Questo suggerimento di tipo può essere aggiunto a un costruttore di controller, a un metodo di controller o a qualsiasi altro costruttore di una classe risolto dal contenitore del servizio:
Proteggere le rotte
Route middleware può essere utilizzato per consentire solo agli utenti autenticati di accedere a una determinata rotta. Laravel fornisce il middleware auth
per impostazione predefinita ed è definito in app\Http\Middleware\Authenticate.php
. Tutto quello che devi fare è collegarlo a una definizione di percorso:
Autenticazione HTTP Basic
L’autenticazione HTTP Basic fornisce un modo rapido per autenticare gli utenti della tua applicazione senza impostare una pagina di “login” dedicata. Per iniziare, collegare il middleware auth.basic
al percorso:
Protezione di un percorso con HTTP Basic
Route::get('profile', );
Per impostazione predefinita, il middleware basic
utilizzerà la colonna email
nel record utente come “nome utente”.
Impostazione di un filtro HTTP Basic Stateless
È inoltre possibile utilizzare l’autenticazione HTTP Basic senza impostare un cookie identificativo utente nella sessione, che è particolarmente utile per l’autenticazione API. Per fare ciò, definire un middleware che chiama il metodo onceBasic
:
public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}
Se si utilizza PHP FastCGI, l’autenticazione HTTP Basic potrebbe non funzionare correttamente. Le seguenti righe devono essere aggiunte al file .htaccess
:
RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* -
Promemoria password & Ripristina
Modello&Tabella
La maggior parte delle applicazioni web fornisce agli utenti un modo per reimpostare le password dimenticate. Invece di costringerti a ri-implementare questo su ogni applicazione, Laravel fornisce metodi convenienti per l’invio di promemoria della password e l’esecuzione di reimpostazioni della password.
Per iniziare, verificare che il modello User
implementi il contratto Illuminate\Contracts\Auth\CanResetPassword
. Naturalmente, il modello User
incluso nel framework implementa già questa interfaccia e utilizza il tratto Illuminate\Auth\Passwords\CanResetPassword
per includere i metodi necessari per implementare l’interfaccia.
Generazione della migrazione della tabella promemoria
Successivamente, è necessario creare una tabella per memorizzare i token di reimpostazione della password. La migrazione per questa tabella è inclusa con Laravel fuori dalla scatola e risiede nella directory database/migrations
. Quindi tutto ciò che devi fare è migrare:
php artisan migrate
Password Reminder Controller
Laravel include anche un Auth\PasswordController
che contiene la logica necessaria per reimpostare le password degli utenti. Abbiamo anche fornito viste per iniziare! Le viste si trovano nella directory resources/views/auth
. Sei libero di modificare queste viste come desideri per soddisfare il design della tua applicazione.
L’utente riceverà una e-mail con un link che punta al metodo getReset
di PasswordController
. Questo metodo renderà il modulo di reimpostazione della password e consentirà agli utenti di reimpostare le proprie password. Dopo la reimpostazione della password, l’utente verrà automaticamente connesso all’applicazione e reindirizzato a /home
. È possibile personalizzare la posizione di reindirizzamento post-reset definendo una proprietà redirectTo
su PasswordController
:
protected $redirectTo = '/dashboard';
Nota: per impostazione predefinita, i token di reimpostazione della password scadono dopo un’ora. È possibile modificare questo tramite l’opzione
reminder.expire
nel fileconfig/auth.php
.
Autenticazione sociale
Oltre all’autenticazione tipica basata su moduli, Laravel fornisce anche un modo semplice e conveniente per autenticarsi con i provider OAuth utilizzando Laravel Socialite. Socialite attualmente supporta l’autenticazione con Facebook, Twitter, Google, GitHub e Bitbucket.
Per iniziare con Socialite, includi il pacchetto nel tuo file composer.json
:
"laravel/socialite": "~2.0"
Quindi, registrare Laravel\Socialite\SocialiteServiceProvider
nel file di configurazione config/app.php
. È inoltre possibile registrare una facciata:
'Socialize' => 'Laravel\Socialite\Facades\Socialite',
Sarà necessario aggiungere le credenziali per i servizi OAuth utilizzati dall’applicazione. Queste credenziali devono essere inserite nel file di configurazione config/services.php
e devono utilizzare la chiave facebook
, twitter
, google
, o github
, a seconda dei provider richiesti dall’applicazione. Ad esempio:
'github' => ,
Successivamente, sei pronto per autenticare gli utenti! Avrai bisogno di due percorsi: uno per reindirizzare l’utente al provider OAuth e un altro per ricevere il callback dal provider dopo l’autenticazione. Ecco un esempio utilizzando la facciata Socialize
:
Il metodo redirect
si occupa di inviare l’utente al provider OAuth, mentre il metodo user
leggerà la richiesta in arrivo e recupererà le informazioni dell’utente dal provider. Prima di reindirizzare l’utente, è anche possibile impostare “ambiti” sulla richiesta:
return Socialize::with('github')->scopes()->redirect();
Una volta che hai un’istanza utente, puoi acquisire alcuni dettagli in più sull’utente: