Si vienes del mundo de NestJS, te encantan los decoradores, la inyección de dependencias y el tipado fuerte. Pero cuando se trata de integrar Firebase Authentication, a menudo se siente como una tarea pesada: guards repetitivos, verificación manual de tokens y manejo de roles desordenado que ensucia nuestros controladores.
Hoy quiero reintroducir nestjs-firebase-auth, una librería diseñada para cerrar esa brecha y tratar la autenticación de Firebase con el respeto que merece en una arquitectura moderna de NestJS.
🤔 ¿Por qué creé esto?
Firebase Authentication es robusto, pero el SDK Admin oficial es solo eso: un SDK. No sabe nada sobre Guards, Decoradores o Inyección de Dependencias de NestJS.
No deberías tener que escribir middleware personalizado para decodificar tokens o verificar claims manualmente en cada controlador. nestjs-firebase-auth cierra esta brecha, dándote una API simplificada y declarativa para asegurar tu aplicación.
Con el último lanzamiento v1.9.0, he pulido la experiencia aún más con decoradores más limpios y una mejor integración con otros servicios de Firebase como Firestore.
Instalación
npm install @alpha018/nestjs-firebase-auth firebase-admin
🛠️ Profundizando en el Código
Veamos ejemplos más realistas de lo que puedes lograr.
1. Autenticación Declarativa (@Auth)
Olvídate de importar y vincular manualmente los guards con @UseGuards(FirebaseGuard). Ahora tienes un decorador @Auth() limpio que hace clara tu intención.
import { Auth } from '@alpha018/nestjs-firebase-auth';
@Auth() // 🛡️ Protege todo este controlador
@Controller('users')
export class UsersController {
@Get('profile')
getProfile() {
return "Estos datos son seguros.";
}
}
2. Control de Acceso Basado en Roles (RBAC)
Manejar roles no debería ser complicado. Utilizo los Custom Claims de Firebase para almacenar los roles del usuario, y el decorador @Roles para hacerlos cumplir sin escribir una sola línea de lógica de validación.
import { Auth, Roles } from '@alpha018/nestjs-firebase-auth';
@Controller('admin')
export class AdminController {
@Auth()
@Roles('ADMIN', 'SUPERUSER') // ⛔ Solo permite usuarios con estos roles
@Get('dashboard')
getDashboard() {
return "Datos de administración ultra secretos";
}
}
Nota: El decorador
@Rolesactiva automáticamente la lógica de validación de roles subyacente cuando se usa con@Auth.
3. Integrando con otros servicios de Firebase
¿Necesitas hablar con Firestore o enviar un mensaje FCM específico? Siempre ha sido posible, pero quiero destacar lo fácil que es acceder a la instancia inicializada de admin.app.App directamente desde mi provider.
import { FirebaseProvider } from '@alpha018/nestjs-firebase-auth';
import { getFirestore } from 'firebase-admin/firestore';
@Injectable()
export class UserDataService {
constructor(private readonly firebaseProvider: FirebaseProvider) {}
async saveUserData(uid: string, data: any) {
// 🔥 Usa la instancia de app del módulo de auth para Firestore
const firestore = getFirestore(this.firebaseProvider.app);
return firestore.collection('users').doc(uid).set(data);
}
}
🎯 Mejores Casos de Uso
- Aplicaciones SaaS: Donde necesitas autenticación robusta y segura con configuración mínima.
- Microservicios: Compartir lógica de autenticación a través de múltiples servicios NestJS fácilmente usando un enfoque de librería compartida.
- Sistemas RBAC: Apps que requieren control granular sobre quién puede hacer qué (Admins vs. Usuarios).
⚠️ Trade-offs (Honestidad Ante Todo)
- Validación Remota: Por defecto, verifico los roles obteniendo el registro de usuario desde Firebase. Esto asegura que los roles estén siempre actualizados (sin tokens obsoletos), pero incurre en una pequeña latencia de red.
-
Validación Local: Puedes optar por
useLocalRoles: truepara validar contra los claims del token ID directamente (cero latencia), pero debes aceptar que los cambios de roles efectivamente se actualizan solo cuando el usuario refresca su token.
💌 Agradecimientos Especiales
Este proyecto ha sido construido con muchas horas de dedicación y amor por el código.
Para una chica que siempre me inspira en silencio, y su sola existencia me incentiva a seguir programando en mis tiempos libres, gracias "YLP".
☕ Apoya el Proyecto
Si encontraste este proyecto útil o interesante, por favor considera apoyarlo:
- ⭐️ Estrella en GitHub: Es gratis y ayuda a otros a encontrar la librería.
- ☕ Cómprame un Café: Si quieres ir un paso más allá, puedes hacerlo en buymeacoffee.com/alpha018.
🔗 Pruébalo y Contribuye
- Repo: github.com/Alpha018/nestjs-firebase-auth
- Autor: dev.to/alpha018
¿Qué piensas? ¿Estás listo para simplificar tu flujo de autenticación? 👇
Top comments (0)