Firebase & Astro
Firebase è una piattaforma di sviluppo di app che fornisce un database NoSQL, autenticazione, sottoscrizioni in tempo reale, funzioni e archiviazione.
Consulta la nostra guida separata per il deployment su Firebase hosting.
Inizializzazione di Firebase in Astro
Sezione intitolata Inizializzazione di Firebase in AstroPrerequisiti
Sezione intitolata Prerequisiti- Un progetto Firebase con un’app web già configurata.
- Un progetto Astro con server-side rendering (SSR) abilitato.
- Credenziali Firebase: Avrai bisogno di due set di credenziali per collegare Astro a Firebase:
- Credenziali dell’app web: Queste credenziali saranno utilizzate dal client della tua app. Puoi trovarle nella console di Firebase in Impostazioni del progetto > Generali. Scorri verso il basso fino alla sezione Le tue app e clicca sull’icona App web.
- Credenziali del progetto: Queste credenziali saranno utilizzate dal server della tua app. Puoi generarle nella console di Firebase in Impostazioni del progetto > Account di servizio > Firebase Admin SDK > Genera nuova chiave privata.
Aggiunta delle credenziali di Firebase
Sezione intitolata Aggiunta delle credenziali di FirebasePer aggiungere le credenziali di Firebase nel tuo progetto con Astro, crea un file .env
nella cartella principale del tuo progetto con le seguenti variabili:
Ora queste variabili d’ambiente sono pronte per essere utilizzate nel tuo progetto.
Se desideri avere IntelliSense per le tue variabili d’ambiente di Firebase, modifica o crea il file env.d.ts
nella cartella src/
del tuo progetto e configura i tipi:
Per saperne di più sulle variabili d’ambiente e sui file .env
in Astro.
Il tuo progetto dovrebbe ora includere questi nuovi file:
Directorysrc/
- env.d.ts
- .env
- astro.config.mjs
- package.json
Installazione delle dipendenze
Sezione intitolata Installazione delle dipendenzePer collegare Astro a Firebase, installa i seguenti pacchetti utilizzando il comando corretto qui sotto in base al tuo gestore di pacchetti preferito:
firebase
- Firebase SDK per il lato clientfirebase-admin
- Firebase Admin SDK per il lato server
Successivamente, crea una cartella chiamata firebase
nella cartella src/
e aggiungi due nuovi file: client.ts
e server.ts
.
Nel client.ts
, aggiungi il seguente codice per inizializzare Firebase nel client utilizzando le credenziali dell’app web e il pacchetto firebase
:
Ricorda di sostituire l’oggetto firebaseConfig
con le credenziali dell’app web.
Nel server.ts
, aggiungi il seguente codice per inizializzare Firebase nel server, utilizzando le credenziali del progetto e il pacchetto firebase-admin
:
Ricorda di sostituire l’oggetto serviceAccount
con le credenziali del progetto.
Infine, il tuo progetto ora dovrebbe includere questi nuovi file:
Directorysrc
- env.d.ts
Directoryfirebase
- client.ts
- server.ts
- .env
- astro.config.mjs
- package.json
Aggiunta dell’autenticazione con Firebase
Sezione intitolata Aggiunta dell’autenticazione con FirebasePrerequisiti
Sezione intitolata Prerequisiti- Un progetto Astro inizializzato con Firebase.
- Un progetto Firebase con l’autenticazione tramite email/password abilitata nella console di Firebase in Autenticazione > Metodo di accesso.
Creazione degli endpoint del server per l’autenticazione
Sezione intitolata Creazione degli endpoint del server per l’autenticazioneL’autenticazione di Firebase in Astro richiede i seguenti endpoint del server di Astro:
GET /api/auth/signin
- per effettuare l’accesso di un utenteGET /api/auth/signout
- per disconnettere un utentePOST /api/auth/register
- per registrare un utente
Crea tre endpoint correlati all’autenticazione in una nuova cartella src/pages/api/auth/
: signin.ts
, signout.ts
e register.ts
.
signin.ts
contiene il codice per effettuare l’accesso di un utente utilizzando Firebase:
Firebase consente solo l’utilizzo di un cookie, e deve essere denominato __session
. Eventuali altri cookie inviati dal client non saranno visibili all’applicazione.
Questa è un’implementazione di base dell’endpoint per l’accesso. Puoi aggiungere ulteriore logica a questo endpoint per adattarlo alle tue esigenze.
signout.ts
contiene il codice per disconnettere un utente eliminando il cookie per la sessione:
Questa è un’implementazione di base dell’endpoint per la disconnessione. Puoi aggiungere ulteriore logica a questo endpoint per adattarlo alle tue esigenze.
register.ts
contiene il codice per registrare un utente utilizzando Firebase:
Questa è un’implementazione di base dell’endpoint per la registrazione. Puoi aggiungere ulteriore logica a questo endpoint per adattarlo alle tue esigenze.
Dopo aver creato gli endpoint del server per l’autenticazione, la cartella del tuo progetto dovrebbe ora includere questi nuovi file:
Directorysrc
- env.d.ts
Directoryfirebase
- client.ts
- server.ts
Directorypages
Directoryapi
Directoryauth
- signin.ts
- signout.ts
- register.ts
- .env
- astro.config.mjs
- package.json
Creazione delle pagine
Sezione intitolata Creazione delle pagineCrea le pagine che utilizzeranno gli endpoint di Firebase:
src/pages/register
- conterrà un form per registrare un utentesrc/pages/signin
- conterrà un form per effettuare l’accesso di un utentesrc/pages/dashboard
- conterrà una dashboard a cui solo gli utenti autenticati possono accedere
L’esempio di src/pages/register.astro
qui sotto include un form che invierà una richiesta POST
all’endpoint /api/auth/register
. Questo endpoint creerà un nuovo utente utilizzando i dati del form e quindi reindirizzerà l’utente alla pagina /signin
.
src/pages/signin.astro
utilizza l’app server di Firebase per verificare il cookie per la sessione dell’utente. Se l’utente è autenticato, la pagina reindirizzerà l’utente alla pagina /dashboard
.
La pagina di esempio qui sotto contiene un form che invierà una richiesta POST
all’endpoint /api/auth/signin
con il token ID generato dall’app client di Firebase.
L’endpoint verificherà il token ID e creerà un nuovo cookie per la sessione dell’utente. Quindi, l’endpoint reindirizzerà l’utente alla pagina /dashboard
.
src/pages/dashboard.astro
verificherà il cookie per la sessione dell’utente utilizzando l’app server di Firebase. Se l’utente non è autenticato, la pagina reindirizzerà l’utente alla pagina /signin
.
La pagina d’esempio qui sotto mostrerà il nome dell’utente e un pulsante per disconnettersi. Cliccando sul pulsante invierà una richiesta GET
all’endpoint /api/auth/signout
.
L’endpoint eliminerà il cookie per la sessione dell’utente e reindirizzerà l’utente alla pagina /signin
.
Aggiunta dei provider OAuth
Sezione intitolata Aggiunta dei provider OAuthPer aggiungere provider OAuth all’app, è necessario abilitarli nella console di Firebase.
Nella console di Firebase, vai nella sezione Autenticazione e clicca sulla scheda Metodo di accesso. Quindi, clicca sul pulsante Aggiungi un nuovo provider e abilita i provider che desideri utilizzare.
L’esempio seguente utilizza il provider Google.
Modifica la pagina signin.astro
per aggiungere:
- un pulsante per effettuare l’accesso con Google sotto il form esistente
- un listener degli eventi per pulsante per gestire il processo di accesso nel tag
<script>
.
Quando viene cliccato, il pulsante di accesso a Google aprirà una finestra popup per effettuare l’accesso. Una volta che l’utente effettua l’accesso, invierà una richiesta POST
all’endpoint /api/auth/signin
con il token ID generato dal provider OAuth.
L’endpoint verificherà il token ID e creerà un nuovo cookie per la sessione dell’utente. Quindi, l’endpoint reindirizzerà l’utente alla pagina /dashboard
.
Connessione al database Firestore
Sezione intitolata Connessione al database FirestorePrerequisiti
Sezione intitolata Prerequisiti-
Un progetto Astro inizializzato con Firebase come descritto nella sezione: Inizializzazione di Firebase in Astro.
-
Un progetto Firebase con un database Firestore. Puoi seguire la documentazione di Firebase per creare un nuovo progetto e configurare un database Firestore.
In questa guida, la collection Firestore si chiamerà friends e conterrà documenti con i seguenti campi:
id
: generato automaticamente da Firestorename
: un campo di tipo stringaage
: un campo di tipo numeroisBestFriend
: un campo di tipo booleano
Creazione degli endpoint del server
Sezione intitolata Creazione degli endpoint del serverCrea due nuovi file in una nuova cartella src/pages/api/friends/
: index.ts
e [id].ts
. Questi creeranno due punti finali server per interagire con il database Firestore nei seguenti modi:
POST /api/friends
: per creare un nuovo documento nella collection friends.POST /api/friends/:id
: per aggiornare un documento nella collection friends.DELETE /api/friends/:id
: per eliminare un documento nella collection friends.
index.ts
conterrà il codice per creare un nuovo documento nella collection friends:
Questa è un’implementazione di base dell’endpoint friends
. Puoi aggiungere ulteriore logica questo endpoint per adattarle alle tue esigenze.
[id].ts
conterrà il codice per aggiornare ed eliminare un documento nella collection friends:
Questa è un’implementazione di base dell’endpoint friends/:id
. Puoi aggiungere ulteriore logica a questo endpoint per adattarlo alle tue esigenze.
Dopo aver creato gli endpoint server per Firestore, la cartella del tuo progetto dovrebbe ora includere questi nuovi file:
Directorysrc
- env.d.ts
Directoryfirebase
- client.ts
- server.ts
Directorypages
Directoryapi
Directoryfriends
- index.ts
- [id].ts
- .env
- astro.config.mjs
- package.json
Creazione delle pagine
Sezione intitolata Creazione delle pagineCrea le pagine che utilizzeranno gli endpoint di Firestore:
src/pages/add.astro
- conterrà un form per aggiungere un nuovo amico.src/pages/edit/[id].ts
- conterrà un form per modificare un amico e un pulsante per eliminare un amico.src/pages/friend/[id].ts
- conterrà i dettagli di un amico.src/pages/dashboard.astro
- mostrerà un elenco con tutti gli amici.
Aggiungi un nuovo record
Sezione intitolata Aggiungi un nuovo recordL’esempio di src/pages/add.astro
qui sotto include un form che invierà una richiesta POST
all’endpoint /api/friends
. Questo endpoint creerà un nuovo amico utilizzando i dati dal form e quindi reindirizzerà l’utente alla pagina /dashboard
.
Modifica o Elimina un record
Sezione intitolata Modifica o Elimina un recordsrc/pages/edit/[id].astro
conterrà un form per modificare i dati di un amico e un pulsante per eliminarlo. All’invio, questa pagina invierà una richiesta POST
all’endpoint /api/friends/:id
per aggiornare i dati di un amico.
Se l’utente clicca il pulsante per eliminare un amico, questa pagina invierà una richiesta DELETE
all’endpoint /api/friends/:id
per eliminare un amico.
Visualizza un singolo record
Sezione intitolata Visualizza un singolo recordsrc/pages/friend/[id].astro
visualizzerà i dettagli di un solo amico.
Mostra una lista di record con un bottone per modificarli
Sezione intitolata Mostra una lista di record con un bottone per modificarliInfine, src/pages/dashboard.astro
mostrerà una lista degli amici. Ogni amico avrà un link alla loro pagina e un bottone che li manderà sulla pagina per modificare l’amico.
Dopo aver creato tutti i file il tuo progetto dovrebbe avere una struttura come questa:
Directorysrc
- env.d.ts
Directoryfirebase
- client.ts
- server.ts
Directorypages
- dashboard.astro
- add.astro
Directoryedit
- [id].astro
Directoryfriend
- [id].astro
Directoryapi
Directoryfriends
- index.ts
- [id].ts
- .env
- astro.config.mjs
- package.json
Risorse della community
Sezione intitolata Risorse della community- Astro e Firebase SSR app di esempio
- Utilizzare Firebase Realtime Database in Astro con Vue: una guida passo passo