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, email non è un’opzione richiesta, è semplicemente usato come esempio. Dovresti usare qualsiasi nome di colonna corrisponda a un “nome utente” nel tuo database.

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 authper 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 getResetdi 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 file config/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:

Recupero dei dettagli utente