Laravel presenta anche un modulo per la gestione dell'autenticazione e autorizzazione delle applicazioni Web. Il framework include automaticamente tra i modelli disponibili la classe User
che rappresenta, grazie ad alcuni traits disponibili nel framework, l'entità che si occuperà di rappresentare gli utenti che potranno loggarsi al sito.
All'interno del file config/auth.php
saranno invece disponibili una serie di configurazioni per modificare il flusso di default del framework. Come impostazione predefinita Laravel sfrutta un'autenticazione basata su database e su Eloquent, ma è possibile modificarne il comportamento sia ignorando l'ORM sia non utilizzando del tutto il database.
All'interno di questo e del prossimo articolo utilizzeremo il pattern standard offerto dal framework. Oltre al modello Laravel ci mette a disposizione anche due migration per il setup delle tabelle richieste (users
e password_resets
).
Controller out-of-the-box
All'interno della codebase di Laravel, sono presenti due controller dedicati alla gestione utente e disponibili nella cartella app/controllers/auth
:
Controller | Descrizione |
---|---|
app\Http\Controllers\Auth\AuthController |
Dedicato ad autenticazione e nuove registrazioni. |
app\Http\Controllers\Auth\PasswordController |
Dedicato al reset della password per utenti già registrati. |
L'approccio offerto da Laravel allo sviluppatore è quello di rendere disponibili le principali logiche già implementate (comunque configurabili) ma di lasciare a lui la definizione delle rotte e le view (che dipendono strettamente dalle logiche di business).
I metodi offerti dal framework sono questi:
Metodo | Descrizione |
---|---|
AuthController@getLogin |
Creazione e visualizzazione della form di login, carica in automatico la view auth.login . |
AuthController@postLogin |
Validazione e eventuale procedura di login. |
AuthController@getLogout |
Logout. |
AuthController@getRegister |
Creazione e visualizzazione della form di registrazione, carica in automatico la view auth.register . |
AuthController@getLogout |
Validazione e eventuale registrazione di un nuovo utente. |
PasswordController@getEmail |
Creazione e visualizzazion del form "ricorda password", carica in automatico la view auth.password . |
PasswordController@postEmail |
Validazione e invio della mail contenente un link con token partendo dalla view emails.password . |
Auth\PasswordController@getReset |
Validazione del token ricevuto via mail e visualizzazione del form di reset password, carica in automatico la view auth.reset . |
Auth\PasswordController@postReset |
Validazione e modifica della password. |
Configurazioni addizionali
Come anticipato, l'approccio del framework è quello di offrire logiche già implementate ma fortemente configurabili tramite property dedicate all'interno dell'AuthController
.
Quando un utente è autenticato con successo, il framework lo redirigerà all'URL /home
ma nel caso questo URL non fosse compatibile con la nostra applicazione possiamo impostare la variabile $redirectPath
. Viceversa, in caso di errore durante il processo di autenticazione verrà caricato l'URL /auth/login
o eventualmente il valore della proprietà $loginPath
.
Oltre a poter configurare gli URL, all'interno di AuthController
è possibile implementare nuovamente alcuni metodi, lasciati apposta a livello di applicazione:
Metodo | Descrizione |
---|---|
validator |
Permette di modificare le regole di validazione del form di registrazione. |
create |
Permette di implementare una nuova logica per inserire il record nel database. |
Entrambi i metodi vengono utilizzati nel caso in cui in fase di registrazione vengano chiesti ulteriori dati agli utenti (per esempio indirizzo, avatar..).
La facade Auth
Oltre ai controller descritti, Laravel presenta anche una facade dedicata a tutte le funzionalità legate all'autenticazione.
Grazie al metodo attempt
è possibile autenticare manualmente un utente passando email e password a prescindere dall'AuthController
. Questo metodo è utile nel caso si creino link di autologin o possibilità di impersonificare un utente da parte di un amministratore. Oltre ad attempt
è possibile utilizzare il metodo login
che riceve direttamente un oggetto User
come parametro o loginUsingId
che richiede l'id dell'utente oppure once
che permette di autenticare l'utente solamente per la richiesta successiva, utile in caso di API stateless che non sfruttino la sessione HTTP.
Nel prossimo articolo implementeremo questo pattern all'interno di Biblios.