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
Per 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:
Il tuo progetto dovrebbe ora includere questi nuovi file:
Cartellasrc/
env.d.ts
.env
astro.config.mjs
package.json
Installazione delle dipendenze
Per 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 client
firebase-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:
Nel server.ts, aggiungi il seguente codice per inizializzare Firebase nel server, utilizzando le credenziali del progetto e il pacchetto firebase-admin:
Infine, il tuo progetto ora dovrebbe includere questi nuovi file:
GET /api/auth/signin - per effettuare l’accesso di un utente
GET /api/auth/signout - per disconnettere un utente
POST /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:
signout.ts contiene il codice per disconnettere un utente eliminando il cookie per la sessione:
register.ts contiene il codice per registrare un utente utilizzando Firebase:
Dopo aver creato gli endpoint del server per l’autenticazione, la cartella del tuo progetto dovrebbe ora includere questi nuovi file:
Cartellasrc
env.d.ts
Cartellafirebase
client.ts
server.ts
Cartellapages
Cartellaapi
Cartellaauth
login.ts
logout.ts
register.ts
.env
astro.config.mjs
package.json
Creazione delle pagine
Crea le pagine che utilizzeranno gli endpoint di Firebase:
src/pages/register - conterrà un form per registrare un utente
src/pages/signin - conterrà un form per effettuare l’accesso di un utente
src/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
Per 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.
In questa guida, la collection Firestore si chiamerà friends e conterrà documenti con i seguenti campi:
id: generato automaticamente da Firestore
name: un campo di tipo stringa
age: un campo di tipo numero
isBestFriend: un campo di tipo booleano
Creazione degli endpoint del server
Crea 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:
[id].ts conterrà il codice per aggiornare ed eliminare un documento nella collection friends:
Dopo aver creato gli endpoint server per Firestore, la cartella del tuo progetto dovrebbe ora includere questi nuovi file:
Cartellasrc
env.d.ts
Cartellafirebase
client.ts
server.ts
Cartellapages
Cartellaapi
Cartellafriends
index.ts
[id].ts
.env
astro.config.mjs
package.json
Creazione delle pagine
Crea 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
L’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
src/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
src/pages/friend/[id].astro visualizzerà i dettagli di un solo amico.
Mostra una lista di record con un bottone per modificarli
Infine, 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: