Come realizzare un’applicazione Laravel Multi-tenant — Parte 4 — Authentication

Francesco Lettera
2 min readJul 16, 2018

--

Parte 0 | Parte 1 | Parte 2 | Parte 3 | Parte 4 | Parte 5 | Parte 6

Questa è la traduzione della serie Full-featured multi-tenant Laravel app from scratch di Ashok Gelal

✅ Utilizzare l’autenticazione out-of-the-box di Laravel per la nostra applicazione

Nella parte terza ci siamo occupati di come inviare una email all’admin per impostare la password. Tutto sembra ok ad eccezione della parte in cui un errore ci dice che non riesce a trovare la tabella password_resets. Ma, se controlliamo il db, la tabella esiste!

Questo perchè l’autenticazione built-in di Laravel, ed in particolare le route, che troviamo in routes/web.php non sono associate alla nostra applicazione e cercano nel database master invece di cercare la tabella nel database tenant. Dunque, vediamo come forzare questa connessione per queste route di autenticazione!

Ci sono molti modi per risolvere la questione. Noi utilizzeremo la soluzione più semplice ed elegante, attraverso il middleware Laravel. L’ho già utilizzato in un’applicazione in produzione e devo dire che fa il suo dovere. Quindi se funziona, perché non riproporre questa soluzione? Andiamo avanti!

1. Crea un middleware

php artisan make:middleware EnforceTenancy

Apri il file app/Http/Middlware/EnforceTenancy.php e modificalo così:

La linea più importante è la #12. Abbiamo semplicemente “forzato” l’utilizzo della connessione “tenant” quando è presente il middleware. Questa è la connessione al db utilizzata dal package Tenancy di default per tutti i tenant.

2. Applica il middleware

Prima di tutto, registra questo middleware nel file app/Http/Kernel.php come tenancy.enforce:

...protected $routeMiddleware = [
...
'tenancy.enforce' => \App\Http\Middleware\EnforceTenancy::class
];...

Adesso, apri il file routes/web.php e applica questo middleware a Auth::routes():

Route::group(['middleware' => 'tenancy.enforce'], function () {
Auth::routes();
});

Fatto! Facile, no? Bene, la prima volta ci ho impiegato un paio d’ore per capire :(

Vai indietro e prova a resettare la password ancora una volta (attraverso l’email di invito), dovrebbe funzionare tutto.

E’ tutto per adesso. Nella prossima parte, impareremo come aggiungere alcuni test automatici al nostro progetto.

--

--