---
title: "Laravel – Firebase – Firestore"
id: "84"
type: "post"
slug: "laravel-firebase-firestore"
published_at: "2026-04-11T12:59:25+00:00"
modified_at: "2026-05-06T18:29:11+00:00"
url: "https://pierluigipapeschi.com/laravel-firebase-firestore/"
markdown_url: "https://pierluigipapeschi.com/laravel-firebase-firestore.md"
excerpt: "Ecco come ho collegato un progetto Firebase ad una nuova installazione di Laravel. La mia necessità è quella di utilizzare l’autenticazione tramite email e password e il database Firestore. Come sempre io utilizzo la linea di comando e installo i..."
taxonomy_category:
  - "Firebase"
  - "Firestore"
  - "Laravel"
---

Ecco come ho collegato un progetto Firebase ad una nuova installazione di Laravel.

La mia necessità è quella di utilizzare l’autenticazione tramite email e password e il database Firestore.

Come sempre io utilizzo la linea di comando e installo i progetti di sviluppo su un mio server Debian 12 quindi una macchina Linux tranquilla. In questo modo sono libero di installare tutto ciò di cui ho bisogno e anche di più…

Per gestire gli spazi hosting uso ISPConfig3 e come server web uso Apache. Una volta installato Laravel (paragrafo successivo) ricordiamoci di configurare la DocumentRoot sulla cartella “public”.

## Laravel

Per prima cosa installiamo Laravel che al momento in cui scrivo è alla versione 12:

```
composer create-project --prefer-dist laravel/laravel laravel-project
```

Una volta finito di lavorare, sposto tutto il contenuto della cartella “laravel-project” sulla root del sito `mv laravel-project/ .`

Spostati anche i file nascosti individuabili con `ls -la laravel-project/`

possiamo eliminare la cartella laravel-project con rmdir laravel-project.

Adesso possiamo proseguire installando un componente che assolve a tutte le operazioni necessarie a connettersi correttamente al progetto Firebase:

# composer require kreait/laravel-firebase

Se dovesse mancare il support a GRPC della versione PHP, proviamo ad installarla così `apt-get install php8.3-grpc`

Per impostare la DocumentRoot del progetto che in Laravel si trova in “/public”, nella gestione del sito, alla tab Options, andiamo nell’area di testo “Apache directives” e inseriamo `DocumentRoot "/var/www/clients/client1/webXXX/web/public/"`

dove webXXX è il numero di sito dato da ISPConfig.

## Firebase

Immagino che tu abbia già un account firebase, forse hai anche già un progetto. Se così non fosse creane uno e vai in “Authentication” poi “Metodi di accesso” e seleziona “Email/password”. Adesso attivalo e… fatto, hai abilitato il primo metodo di accesso.

Adesso clicca su “Panoramica del progetto” e poi su “Impostazioni del progetto”. In questa fase ci interessa solo un file JSON con le varie chiavi e i parametri da passare a Laravel, quindi andiamo su “Account di servizio” e “Genera nuova chiave privata”.

Scaricato il file va salvato nella cartella “storage/app/firebase” di Laravel.

## Configurazione generale

Adesso mettiamo insieme le varie cose.

Apriamo il file .env di Laravel e aggiungiamo in fondo:

```
FIREBASE_CREDENTIALS=storage/app/firebase/progetto-firebase-adminsdk-xxx.json (il tuo file)
FIREBASE_PROJECT=id del tuo progetto
```

Salviamo e rigeneriamo i parametri con

```
php artisan optimize:clear
```

Adesso dobbiamo far pubblicare il file di configurazione del plugin eseguendo:

```
php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider"
```

Si aggiungerà il file config/firebase.php e aprendolo facciamo queste modifiche:

```
'default' => 'id progetto firebase', 
'projects' => [
  'id progetto firebase' => [
    'credentials' => [
      'file' => env('FIREBASE_CREDENTIALS', base_path('il nome del file delle credenziali scaricato')),
    ], 
  ....
],
```

### Authentication con email e password

Creo un controller in app/Http/Controller di nome AuthController.php:

```
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Kreait\Firebase\Contract\Auth;

class AuthController extends Controller
{
protected $auth;&amp;lt;/code&amp;gt;

public function __construct(Auth $auth)
{
$this-&amp;amp;gt;auth = $auth;
}

/**
* Login con email e password Firebase
*/
public function login(Request $request)
{
$request-&amp;amp;gt;validate([
'email' =&amp;amp;gt; 'required|email',
'password' =&amp;amp;gt; 'required'
]);

try {
$signInResult = $this-&amp;amp;gt;auth-&amp;amp;gt;signInWithEmailAndPassword(
$request-&amp;amp;gt;email,
$request-&amp;amp;gt;password
);

$firebaseUser = $signInResult-&amp;amp;gt;data();
$idToken = $signInResult-&amp;amp;gt;idToken();

return response()-&amp;amp;gt;json([
'message' =&amp;amp;gt; 'Login effettuato con successo!',
'user' =&amp;amp;gt; $firebaseUser,
'token' =&amp;amp;gt; $idToken,
]);
} catch (\Kreait\Firebase\Exception\Auth\InvalidPassword $e) {
return response()-&amp;amp;gt;json(['error' =&amp;amp;gt; 'Password non valida'], 401);
} catch (\Kreait\Firebase\Exception\Auth\UserNotFound $e) {
return response()-&amp;amp;gt;json(['error' =&amp;amp;gt; 'Utente non trovato'], 404);
} catch (\Throwable $e) {
return response()-&amp;amp;gt;json(['error' =&amp;amp;gt; $e-&amp;amp;gt;getMessage()], 500);
}
}

public function register(Request $request)
{
$userProperties = [
'email' =&amp;amp;gt; $request-&amp;amp;gt;email,
'password' =&amp;amp;gt; $request-&amp;amp;gt;password,
];

$this-&amp;amp;gt;auth-&amp;amp;gt;createUser($userProperties);
return response()-&amp;amp;gt;json(['message' =&amp;amp;gt; 'User created successfully']);
}
}
```

### Firestore

Per utilizzare Firestore dobbiamo installare la dipendenza in Laravel e alcune librerie di Google:

# composer require google/cloud-firestore

Poi:

# pecl install grpc

Questo compilerà le librerie di comunicazione con i server Google e richiedono parecchio tempo per essere compilati (macchina Linux Debian 12 e nel mio caso più di 2 ore, il server ha bogomips 4190…:-).
