10 minutos de lectura
0
En este artículo, te enseñaré cómo integrar Firebase Auth en una aplicación Next.js y realizar ciertas tareas solo cuando se tenga una sesión activa.
Para esta integración, utilizaremos el proyecto anterior nuestro "chat con firebase realtime", Si aún no estás familiarizado con él, te invito a leer el artículo anterior aquí.
Para comenzar, dirígete a la consola de Firebase y habilita el módulo de Autenticación. Luego, elige Google como método de inicio de sesión. Después de habilitar el proveedor de Google, ve a tu base de datos en tiempo real y actualiza las reglas para que solo los usuarios autenticados puedan escribir comentarios, de la siguiente manera:
Dirígete al archivo lib/firebase.ts
, de tu proyecto y agrega las siguientes líneas:
Para implementar la lógica de autenticación, vamos a envolver nuestra aplicación en un contexto.
Comencemos creando un nuevo archivo store/AuthProvider.tsx
:
En AuthProvider
hemos definido un estado llamado user
, el cual pasaremos a
nuestra jerarquía de componentes a través del AuthContext
. Además, agregamos un useEffect
para inicializar el observador de la autenticación del usuario en tiempo real,
lo cual logramos gracias al método onAuthStateChanged
de Firebase.
Para agregar el proveedor que creamos previamente, nos dirigimos al archivo pages/_app.tsx
y envolvemos nuestra aplicación con él:
En este punto, ya hemos configurado el contexto y proveedor en la aplicación.
Para tener el control de inicio y cierre de sesión, vamos a crear dos componentes: SignInWithGoogle
y SignOut
.
Comenzamos por crear el archivo components/SignInWithGoogle.tsx
.
Este componente se encarga de iniciar nuestra sesión con el proveedor de Google.
Luego, creamos el archivo components/SignOut.tsx
. Este componente se
encarga de cerrar nuestra sesión con el proveedor de Google.
Para finalizar, agregamos los controles a nuestra vista. Nos dirigimos al archivo
pages/posts/[id].tsx
y agregamos las siguientes líneas:
Como se puede observar, declaramos la variable user
, la cual utiliza el contexto que creamos anteriormente y que nos proporciona la información del usuario.
Si intentamos hacer un comentario sin haber iniciado sesión previamente, veremos un mensaje de error. Esto se debe a la actualización que realizamos en las reglas de la base de datos, donde especificamos que solo los usuarios autenticados tienen permisos de escritura.
Para solucionar esto, vamos a modificar nuestro componente Editor
de la siguiente manera:
Como se puede observar, volvemos a usar la variable user
del contexto para verificar si existe una sesión del usuario.
Además, hemos eliminado los campos de texto y sus validaciones donde solicitábamos el
nombre y el correo electrónico del autor, ya que ahora esos datos los tomaremos de la variable user
.
Por último, hemos agregado dos props
adicionales llamados parent
y onCancel
,
que usaremos en el siguiente punto para poder responder a comentarios.
Para facilitar la respuesta de comentarios, es necesario agregar algunas funciones
en el archivo lib/firebase-utils.ts
.
Primero, agregamos la función orderByDate
, que ordenará los comentarios por fecha de
creación de forma descendente. Luego, definimos la función sortTreeNodes
, que
formateará el arreglo de comentarios para que cada comentario contenga sus respuestas en un nuevo atributo
children
, de forma recursiva. Esto es necesario porque la data que llega desde la base de datos no está ordenada.
Aquí está el código correspondiente en tsx para estas funciones:
Con estas funciones, podremos mostrar los comentarios y sus respuestas ordenados de forma descendente,
y cada comentario tendrá su propio objeto children
que contendrá sus respuestas.
Continuando con la implementación de las respuestas a los comentarios, en el archivo
components/DiscussionThread.tsx
vamos a dar formato a nuestro array
de comentarios.
En este punto, cada comentario tiene un atributo children
que puede estar vacío o
contener respuestas. Para manejar estas respuestas, debemos dirigirnos al
archivo components/Comment.tsx
y realizar algunas modificaciones. El código debe quedar
como se muestra a continuación:
¡Excelente trabajo! Si has seguido todos los pasos, deberías tener un sistema de comentarios completamente funcional en tu aplicación Next.js.
El código completo de este proyecto está disponible en Github.
Siéntete libre de personalizarlo y agregar más características a medida que lo necesites. También puedes compartir tus mejoras y sugerencias con la comunidad a través de un pull request en el repositorio de Github. ¡Gracias por leer y espero que hayas aprendido algo nuevo!
Si lo deseas, puedes apoyarme con una donación voluntaria. Tu aporte me permite dedicar más tiempo a investigar, escribir y mejorar la calidad del contenido que publico. ¡Muchísimas gracias por considerar impulsar este proyecto!
Compartir en: