Contenido del curso
Conexiones sociales
Conexiones sin password
Protegiendo una API
Auth0 SDKs
Administración de usuarios
Reglas y Acciones en Auth0
Multifactor Authentication
Casos en producción
Reglas de Firestore basadas en custom claims
Resumen
Configurar reglas de Firestore basadas en custom claims te permite filtrar datos por usuario sin exponer toda tu colección al público. Aprenderás a integrar Firebase Authentication con un custom token, aplicar condicionales where en tus queries y blindar tu base de datos antes de salir a producción. Ideal si ya trabajas con Next.js, Firebase y manejas roles por usuario.
Cómo activo el módulo de autenticación anónima en Firebase
Antes de autenticarte con un custom token, necesitas habilitar el método de login anónimo desde la consola de Firebase. Ve a la sección de Authentication, ubica la opción Anónimo, dale Habilitar y guarda. Con eso queda listo el módulo para recibir sesiones generadas desde tu propio backend [00:14].
¿Para qué sirve el login anónimo si voy a usar custom token? Es el método base que Firebase necesita activo para aceptar sesiones creadas con
signInWithCustomToken. No significa que tus usuarios entren sin credenciales.
Cómo conecto signInWithCustomToken con mi hook de películas
En tu archivo firebase/index.js importa y exporta dos métodos nuevos: getAuth y signInWithCustomToken. Centralizar estos exports te ahorra fricción cuando los uses en hooks o componentes [00:38].
Luego, en hooks/useMovies, actualiza el query para que primero pida el token y los user claims a tu API:
- Haz
fetcha tu endpoint que retorna el Firebase token. - Parsea la respuesta a JSON para extraer
tokenyclaims. - Llama
signInWithCustomToken(auth, token)para abrir la sesión con esos claims. - Importa también el método
wherede Firestore para construir el condicional.
Esa llamada crea una nueva sesión del usuario cargando los claims que firmaste en tu route API. A partir de ahí, los claims viajan con cada request a Firestore [01:30].
Cómo uso where para filtrar por género
Dentro del query de películas, agrega una sentencia where que filtre solo los documentos cuyo género coincida con alguno de los géneros incluidos en los claims del usuario. Si el usuario tiene horror y thriller, verá ambos. Si solo tiene uno, verá solo ese subconjunto.
Por qué debo modificar las reglas de Firestore en producción
Las reglas de Firestore son la capa de seguridad que decide qué requests pueden leer o escribir en tu base de datos. Si las dejas con true quemado, cualquiera con tu config puede leer todo. Eso funciona para pruebas, pero es un riesgo real al publicar [02:40].
¿Qué son los custom claims en Firebase? Son atributos personalizados que firmas dentro del token del usuario, como roles o permisos. Las reglas de Firestore pueden leerlos y filtrar el acceso sin depender solo del UID.
Cómo escribo la regla con hasAny y request.auth.token
En la pestaña Rules de Firestore, ajusta el match para que apunte directamente a la colección movies en vez de un comodín. Dentro, define solo el permiso de lectura ya que estás trabajando con datos de prueba.
El condicional revisa que el request.auth.token tenga un atributo de géneros y que ese arreglo haga match con los géneros permitidos usando la función hasAny. Le pasas un array como ['horror', 'thriller'] y Firestore deja pasar el request solo si hay coincidencia [03:20].
De esta forma, la regla aplica únicamente a la colección de películas. Como no tienes otras colecciones activas, no necesitas reglas adicionales todavía.
Cómo pruebo que las reglas funcionan con distintos usuarios
Levanta el servidor y refresca la app. Con un usuario que tiene ambos roles, vas a ver tanto las películas de horror como las de thriller. Hasta ahí todo bien, pero la prueba real está en usuarios con un solo rol.
Inicia sesión con la cuenta que solo tiene el claim de horror. Como activaste multifactor authentication en clases anteriores, valida con tu llave de seguridad. Vas a notar que la sección de thriller aparece vacía y la de horror carga normal [05:00].
Cómo añado un componente Empty para estados sin datos
Una sección vacía sin feedback se ve rota. Para evitarlo, crea un componente Empty que reciba una prop show:
- Si
showestrue, renderiza un párrafo con el mensaje There are no movies at this time. - Si es
false, retornanull. - Úsalo en tu componente de tabs evaluando si
length === 0para cada listado.
Guarda y vuelve a probar. Ahora cuando entres con el usuario de thriller, vas a ver el estado empty unos instantes mientras carga, después aparecen las películas correctas y la pestaña de horror queda con el mensaje vacío. Funciona al revés con el otro usuario.
Qué reto debo resolver con Supabase y Auth0
Replica esta misma arquitectura usando Supabase Auth con Auth0. En la clase pasada armaste el diagrama, ahora llévalo a una implementación real: genera un token desde Auth0, intercámbialo por una sesión en Supabase y aplica Row Level Security basada en claims, igual que hiciste aquí con Firestore.
Cuéntame en los comentarios qué dificultades encontraste al traducir el flujo de Firebase a Supabase.