Firebase es una plataforma de desarrollo de aplicaciones que proporciona una base de datos NoSQL, autenticación, suscripciones en tiempo real, funciones y almacenamiento.
Credenciales de Firebase: Necesitarás dos conjuntos de credenciales para conectar Astro a Firebase:
Credenciales de la aplicación web: Estas credenciales serán utilizadas por el lado del cliente de tu aplicación. Puedes encontrarlas en la consola de Firebase en Project settings > General. Desplázate hacia abajo hasta la sección Your apps y haz clic en el icono de Web app.
Credenciales del proyecto: Estas credenciales serán utilizadas por el lado del servidor de tu aplicación. Puedes generarlas en la consola de Firebase en Project settings > Service accounts > Firebase Admin SDK > Generate new private key.
Agregando credenciales de Firebase
Para agregar tus credenciales de Firebase a Astro, crea un archivo .env en la raíz de tu proyecto con las siguientes variables:
Ahora, estas variables de entorno están disponibles para su uso en tu proyecto.
Si deseas tener IntelliSense para tus variables de entorno de Firebase, edita o crea el archivo env.d.ts en tu directorio src/ y configura tus tipos:
Tu proyecto ahora debería incluir estos nuevos archivos:
Directoriosrc/
env.d.ts
.env
astro.config.mjs
package.json
Instalando dependencias
Para conectar Astro con Firebase, instala los siguientes paquetes utilizando el comando único correspondiente a tu gestor de paquetes preferido:
firebase - el SDK de Firebase para el lado del cliente
firebase-admin - el SDK de Firebase Admin para el lado del servidor
A continuación, crea una carpeta llamada firebase en el directorio src/ y agrega dos archivos nuevos a esta carpeta: client.ts y server.ts.
En client.ts, agrega el siguiente código para inicializar Firebase en el cliente utilizando las credenciales de tu aplicación web y el paquete firebase:
En server.ts, agrega el siguiente código para inicializar Firebase en el servidor utilizando las credenciales de tu proyecto y el paquete firebase-admin:
Finalmente, tu proyecto ahora debería incluir estos nuevos archivos:
Un proyecto de Firebase con autenticación por correo electrónico/contraseña habilitada en la consola de Firebase bajo la método Authentication > Sign-in.
GET /api/auth/signin - para iniciar sesión a un usuario
GET /api/auth/signout - para cerrar la sesión a un usuario
POST /api/auth/register - para registrar un usuario
Crea tres endpoints relacionados con la autenticación en un nuevo directorio src/pages/api/auth/: signin.ts, signout.ts y register.ts.
signin.ts contiene el código para iniciar sesión de un usuario utilizando Firebase:
signout.ts contiene el código para cerrar la sesión de un usuario eliminando la cookie de sesión:
register.ts contiene el código para registrar un usuario utilizando Firebase:
Después de crear los endpoints del servidor para la autenticación, tu directorio del proyecto debería incluir estos nuevos archivos:
Directoriosrc
env.d.ts
Directoriofirebase
client.ts
server.ts
Directoriopages
Directorioapi
Directorioauth
signin.ts
signout.ts
register.ts
.env
astro.config.mjs
package.json
Creando páginas
Crea las páginas que utilizarán los endpoints de Firebase:
src/pages/register - contendrá un formulario para registrar un usuario
src/pages/signin - contendrá un formulario para iniciar sesión un usuario
src/pages/dashboard - contendrán un panel de control al que solo podrán acceder los usuarios autenticados
El ejemplo src/pages/register.astro a continuación incluye un formulario que enviará una solicitud POST al endpoint /api/auth/register. Este endpoint creará un nuevo usuario utilizando los datos del formulario y luego redireccionará al usuario a la página /signin.
src/pages/signin.astro utiliza la aplicación del servidor Firebase para verificar la cookie de sesión del usuario. Si el usuario está autenticado, la página redireccionará al usuario a la página /dashboard.
La página de ejemplo a continuación contiene un formulario que enviará una solicitud POST al endpoint /api/auth/signin con el token de ID generado por la aplicación cliente de Firebase.
El endpoint verificará el token de ID y creará una nueva cookie de sesión para el usuario. Luego, el endpoint redireccionará al usuario a la página /dashboard.
src/pages/dashboard.astro verificará la cookie de sesión del usuario utilizando la aplicación del servidor de Firebase. Si el usuario no está autenticado, la página redireccionará al usuario a la página /signin.
La página de ejemplo a continuación muestra el nombre del usuario y un botón para cerrar sesión. Al hacer clic en el botón, se enviará una solicitud GET al endpoint /api/auth/signout.
El endpoint eliminará la cookie de sesión del usuario y redireccionará al usuario a la página /signin.
Agregando proveedores de OAuth
Para agregar proveedores de OAuth a tu aplicación, debes habilitarlos en la consola de Firebase.
En la consola de Firebase, ve a la sección de Authentication y haz clic en la pestaña de Sign-in method Luego, haz clic en el botón de Add a new provider y habilita los proveedores que deseas utilizar.
El ejemplo a continuación utiliza el proveedor Google.
Edita la página signin.astro para agregar:
un botón para iniciar sesión con Google debajo del formulario existente.
un event listener en el botón para manejar el proceso de inicio de sesión en el <script> existente.
Cuando se hace clic en el botón de inicio de sesión de Google, se abrirá una ventana emergente para iniciar sesión con Google. Una vez que el usuario inicie sesión, se enviará una solicitud POST al endpoint /api/auth/signin con el token de identificación generado por el proveedor de OAuth.
El endpoint verificará el token de identificación y creará una nueva cookie de sesión para el usuario. Luego, el endpoint redirigirá al usuario a la página /dashboard.
En esta receta, la colección de Firestore se llamará friends y contendrá documentos con los siguientes campos:
id: autogenerado por Firestore
name: un campo de tipo string
age: un campo de tipo number
isBestFriend: un campo de tipo boolean
Creando los endpoints del servidor
Crea dos archivos nuevos en un directorio nuevo src/pages/api/friends/: index.ts y [id].ts. Estos crearán dos endpoints del servidor para interactuar con la base de datos Firestore de la siguiente manera:
POST /api/friends: para crear un nuevo documento en la colección friends.
POST /api/friends/:id: para actualizar un nuevo documento en la colección friends.
DELETE /api/friends/:id: para eliminar un nuevo documento en la colección friends.
El archivo index.ts contendrá el código para crear un nuevo documento en la colección friends:
El archivo [id].ts contendrá el código para actualizar y eliminar un documento en la colección friends:
Después de crear los endpoints del servidor para Firestore, tu directorio de proyecto debería incluir estos nuevos archivos:
Directoriosrc
env.d.ts
Directoriofirebase
client.ts
server.ts
Directoriopages
Directorioapi
Directoriofriends
index.ts
[id].ts
.env
astro.config.mjs
package.json
Creando páginas
Crea las páginas que utilizarán los endpoints de Firestore:
src/pages/add.astro - contendrá un formulario para agregar un nuevo amigo.
src/pages/edit/[id].ts - contendrá un formulario para editar un amigo y un botón para eliminar un amigo.
src/pages/friend/[id].ts - contendrá los detalles de un amigo.
src/pages/dashboard.astro - mostrará una lista de amigos.
Agrega un nuevo registro.
El ejemplo src/pages/add.astro a continuación incluye un formulario que enviará una solicitud POST al endpoint /api/friends. Este endpoint creará un nuevo amigo utilizando los datos del formulario y luego redireccionará al usuario a la página /dashboard.
Editar o eliminar un registro.
src/pages/edit/[id].astro contendrá un formulario para editar los datos de un amigo y un botón para eliminar un amigo. Al enviarlo, esta página enviará una solicitud POST al endpoint /api/friends/:id para actualizar los datos de un amigo.
Si el usuario hace clic en el botón de eliminar, esta página enviará una solicitud DELETE al endpoint /api/friends/:id para eliminar a un amigo.
Mostrar un registro individual
El archivo src/pages/friend/[id].astro mostrará los detalles de un amigo.
Mostrar una lista de registros con un botón de edición
Finalmente, src/pages/dashboard.astro mostrará una lista de amigos. Cada amigo tendrá un enlace a su página de detalles y un botón de edición que redirigirá al usuario a la página de edición.
Después de crear todas las páginas, deberías tener la siguiente estructura de archivos: