Skip to main content

Struttura interna del sistema di autenticazione di Laravel

Facade Auth e AuthManager

La facade Auth è un proxy verso Illuminate\Auth\AuthManager. AuthManager gestisce più guard con il driver pattern e, in base alla configurazione di config/auth.php, crea e memorizza in cache la corretta istanza del guard.
resolve() legge la chiave driver dall’array guards di config/auth.php e chiama la closure factory corrispondente. Anche i driver integrati session e token sono registrati con lo stesso meccanismo.

Differenza tra l’interfaccia Guard e StatefulGuard

Un guard di autenticazione Laravel deve implementare almeno Illuminate\Contracts\Auth\Guard. Se serve mantenere una sessione, implementa StatefulGuard.
StatefulGuard estende Guard e aggiunge i metodi necessari a mantenere lo stato di login tramite sessione o cookie.
Per un guard che non richiede sessione (autenticazione API, autenticazione con token personalizzato, ecc.) è sufficiente implementare Guard. Se ti serve una sessione — come il login amministratore — implementa StatefulGuard.

Implementazione di un guard personalizzato

Trait GuardHelpers

Poiché check(), guest(), id() e hasUser() di Guard hanno un’implementazione quasi identica, Laravel fornisce il trait Illuminate\Auth\GuardHelpers. Con questo trait devi implementare solo user() e validate().

Esempio: guard di autenticazione tramite API token

Ispirandoci al design di TokenGuard, implementiamo un semplice guard di autenticazione con API token. Recupera il token dagli header o dai parametri della richiesta e risolve l’utente tramite UserProvider.
1

Creare la classe guard

Crea la classe guard nella directory app/Auth.
2

Registrare il guard nel service provider

Nel metodo boot() di AppServiceProvider registra il guard con Auth::extend().
Auth::createUserProvider() legge la configurazione providers di config/auth.php e restituisce l’istanza UserProvider corrispondente. Finché non crei un provider personalizzato, con questa chiamata usi l’EloquentUserProvider standard.
3

Configurare il guard in config/auth.php

Aggiungi il nuovo guard a config/auth.php.
4

Applicare il guard alle rotte

Nel middleware auth indichi il nome del guard.
Per usare un guard specifico in un controller o nel codice, chiami Auth::guard('api') o auth('api').

Guard rapido con closure

Con Auth::viaRequest() puoi definire un guard semplice usando solo una closure, senza creare una classe. Adatto a prototipi o ad autenticazioni molto semplici.
Configurazione in config/auth.php:
Un guard definito con Auth::viaRequest() non usa un UserProvider, quindi metodi del provider come retrieveById() non funzionano. In produzione consigliamo un guard class-based con Auth::extend().

Implementare un UserProvider personalizzato

Se recuperi le informazioni utente da una sorgente diversa dal DB (API esterne, LDAP, ecc.) implementa l’interfaccia Illuminate\Contracts\Auth\UserProvider.

Registrazione di un UserProvider personalizzato

Aggiungi la sezione providers in config/auth.php:
Combina guard e provider:

Casi d’uso pratici

Multi-authentication (guard separati per admin e utente)

1

Creare il modello Admin

Prepara un modello Eloquent per gli amministratori. Estendendo Authenticatable si integra con il sistema Auth.
2

Configurare config/auth.php

3

Impostare rotte e middleware

4

Scrivere il login indicando il guard

Autenticazione API esterna con JWT

Esempio di guard personalizzato che usa un servizio esterno di autenticazione JWT.
Registrazione in AppServiceProvider:
Puoi accedere anche a metodi specifici del guard personalizzato, ad esempio Auth::guard('jwt')->payload(). Auth::guard() restituisce l’istanza stessa del guard, quindi puoi chiamare anche metodi non presenti nell’interfaccia.

Test

Nei test unitari di un guard personalizzato, mocki UserProvider e verifichi il comportamento del guard.
Nei feature test con ActingAs puoi autenticare un utente su un guard specifico.

Pagine correlate

Autenticazione (introduzione)

Rivedi gli starter kit e il flusso di autenticazione standard.

Service container

Comprendi il meccanismo del service container usato per registrare i guard.
Ultima modifica il 13 luglio 2026